在 python 中编码格式错误的表情符号
Encode wrong formated emojis in python
编辑
我有一个文本文件,其中包含我无法正确处理的包含表情符号的句子。
我的 csv 文件包含那些句子:
肯定会有人排队去摸这个终端unicode-d83d\ude02
Aurelie Gouverneur 看到连 leche 都可以 unicode-d83d\ude02unicode-d83d\ude02unicode-d83e\udd2e
Mélanie Ham 甚至和 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
问题可能与我将 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
编辑
我有一个文本文件,其中包含我无法正确处理的包含表情符号的句子。
我的 csv 文件包含那些句子:
肯定会有人排队去摸这个终端unicode-d83d\ude02
Aurelie Gouverneur 看到连 leche 都可以 unicode-d83d\ude02unicode-d83d\ude02unicode-d83e\udd2e
Mélanie Ham 甚至和 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
问题可能与我将 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