在 python 中编码格式错误的表情符号

Encode wrong formated emojis in python

编辑

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

我的 csv 文件包含那些句子:

我的代码:

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

问题可能与我将 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)
Je suis sur que certaines personnes vont faire la file pour toucher cette borne 
Aurelie Gouverneur voir même la lechée peut être 
Mélanie Ham même ce prendre en photo avec