在python中对格式错误的表情进行编码 编辑

在python中对格式错误的表情进行编码 编辑,python,unicode,emoji,Python,Unicode,Emoji,我有一个文本文件,其中包含我无法正确处理的句子,包括表情符号 我的csv文件包含以下句子: 我是某些人,他们的文件是由cette承载的unicode-d83d\ude02 Aurelie Gouverneur对unicode-d83d\ude02unicode-d83d\ude02unicode-d83e\udd2e的评价 Mélanie Ham Même ce prendre en photo avec unicode-d83e\udd23 我的代码: df_test=pd.read

我有一个文本文件,其中包含我无法正确处理的句子,包括表情符号

我的csv文件包含以下句子:

  • 我是某些人,他们的文件是由cette承载的unicode-d83d\ude02

  • Aurelie Gouverneur对unicode-d83d\ude02unicode-d83d\ude02unicode-d83e\udd2e的评价

  • Mélanie Ham Même ce prendre en photo avec unicode-d83e\udd23

我的代码:

df_test=pd.read_csv("myfile.csv", sep=';',index_col=None, encoding="utf-8")

for item, row in df_test.iterrows():
    print(repr(row["Message"]))
    s=row["Message"]
    s = re.sub(r'unicode-([0-9a-f]{4})',lambda m: chr(int(m.group(1),16)),s)
    s = s.encode('utf16','surrogatepass').decode('utf16')
打印结果:

'Je suis sur que certaines personnes vont faire la file pour toucher cette borne unicode-d83d\\ude02'
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-40-e3c423a15acd> in <module>
      5     s=row["Message"]
      6     s = re.sub(r'unicode-([0-9a-f]{4})',lambda m: chr(int(m.group(1),16)),s)
----> 7     s = s.encode('utf16','surrogatepass').decode('utf16')

UnicodeDecodeError: 'utf-16-le' codec can't decode bytes in position 162-163: illegal UTF-16 surrogate
'Je suis sur que certaines persons vont faire la file pour toucher cette borne unicode-d83d\\ude02'
---------------------------------------------------------------------------
UnicodeDecodeError回溯(最近一次呼叫最后一次)
在里面
5s=行[“消息”]
6s=re.sub(r'unicode-([0-9a-f]{4}),lambda m:chr(int(m.group(1,16)),s)
---->7 s=s.encode('utf16','subrogatepass')。decode('utf16'))
UnicodeDecodeError:“utf-16-le”编解码器无法解码162-163位置的字节:非法utf-16代理

问题可能与将csv加载到数据帧时的编码有关,但我不知道如何解决这个问题…

文本是Unicode转义和自定义语法的组合。这将通过捕获两个转义码的十六进制值进行解码,然后将它们格式化为一对JSON格式的代理,并让该模块转换为正确的Unicode代码点

#coding:utf8
import re
import json

sentences = [r'Je suis sur que certaines personnes vont faire la file pour toucher cette borne unicode-d83d\ude02',
             r'Aurelie Gouverneur voir même la lechée peut être unicode-d83d\ude02unicode-d83d\ude02unicode-d83e\udd2e',
             r'Mélanie Ham même ce prendre en photo avec unicode-d83e\udd23']

def surrogates_to_unicode(m):
    upper = int(m.group(1),16)
    lower = int(m.group(2),16)
    return json.loads(f'"\\u{upper:04x}\\u{lower:04x}"')

for s in sentences:
    s = re.sub(r'unicode-([0-9a-f]{4})\\u([0-9a-f]{4})',surrogates_to_unicode,s)
    print(s)

jesuis sur que certaines persons vont faire la file pour toucher cette borne这能回答你的问题吗?不幸的是,我尝试了这个解决方案,但它不适合我。。。我首先将“unicode-”替换为“\u”。但它写的是“\\ud83d\ude44”,通过编码/解码功能,它不能理解为表情符号。我得问问你到底得到了什么。请给我文字字节。目前,您的帖子包含
“这是一些文本和表情符号**unicode-d83d\ude44**”
,这已经够模糊的了。星星是它的一部分吗?(我想不会,但我可以猜一整天。)d83d之前没有反斜杠?ude44
前面只有一个反斜杠——或者,是吗?或者它是Python字符串
repr
的一部分?只有你能告诉我们,我有一根绳子。str=“这是一些文本和表情符号unicode-d83d\ude44”。我的目标是将“unicode-d83d\ude44”转换为“\ud83d\ude44”,这样我就可以使用“\ud83d\ude44”打印表情符号。编码('utf-16','subrogatePass')。解码('utf-16')。实际上,我的输入文件是一个csv,我将其加载到数据帧中。据我所知,CSV是由一个java程序保存的,该程序将表情编码为java标准(例如:unicode-d83d\ude44)。但是,当我在python数据帧中加载我的csv时,这些表情被编码为字符串而不是unicode字符…@Erwan,这不是我见过的标准。为什么两个代理都没有使用\u转义?非常感谢!!!!:)老实说,我不知道他们为什么这样格式化表情…我仍然有一些困难加载一个csv包含那些格式错误的表情。错误代码为:UnicodeDecodeError:'utf-16-le'编解码器无法解码位置162-163的字节:非法的utf-16代理
df_test=pd.read_csv(“myfile.csv”,sep=';”,index_col=None,encoding=“utf-8”),用于项目,df_test.iterrows()中的行:print(row[“Message”])s=row[“Message”]print(s)s)s=re.sub(r'unicode-([0-9a-f]{4}),lambda m:chr(int(m.group(1),16)),s)s=s.encode('utf16','subrogatepass')。decode('utf16')打印
@Erwan用您的示例编辑您的问题。对失败字符串的内容要精确。使用
repr()
显示。