我有一个csv文件(see here),其中包含来自Facebook公共页面帖子的元数据。我需要解码所有内容,例如:\xc3\xa9
和\xf0\x9f\x91\xa9\xf0\x9f\x8f\xbb\xe2\x80\x8d\xf0\x9f\x92\xbc
元数据“发布消息”为:
“ b'Bom dia,genteee!我分发了一个表情符号\ xc3 \ xa9: \ xf0 \ x9f \ x91 \ xa9 \ xf0 \ x9f \ x8f \ xbb \ xe2 \ x80 \ x8d \ xf0 \ x9f \ x92 \ xbc \ nO que voc \ xc3 \ xaas acham?'“
,它的类型是str对象。
我需要将其转换为:
Bom dia,genteee!我的表情符号和民谣卡拉: O quevocêsacham?
我该怎么做?我需要转换所有csv。
修改:1:我尝试过
My_string = post_message.split("b'")[1].split("'")[0]
My_string.encode().decode('unicode_escape')
但是结果却与我预期的不同:
Bom dia,genteee! Me disseram que esse emojié©minha cara: ð©ð»âð¼O quevocâsacham?
解决方案:
正如@Ben指出的那样,我的数据是一个包含字节的字符串对象,而不是字节对象。因此使用了@ShadowRanger解决方案(see his answer here)。我做到了:
My_string = post_message[2:len(post_message)-1] #to remove "b'" from begining and "'" from end
My_string = My_string.encode('utf-8').decode('unicode_escape').encode('latin-1').decode('utf-8')
结果:
Bom dia,genteee!我的表情符号和民谣卡拉: O quevocêsacham?
答案 0 :(得分:2)
我注意到您发布的字符串看起来像“ b'...'”,在带引号b的单引号字符串周围用双引号引起来。看起来像一个包含字节字符串的文本表示形式的字符串,而不是将字节字符串打印为文本。
例如:
>>> text = 'föő'
>>> text
'föő'
>>> bytestring = text.encode()
>>> bytestring
b'f\xc3\xb6\xc5\x91'
>>> str(bytestring)
"b'f\\xc3\\xb6\\xc5\\x91'"
这建议您在某个时候有一个字节字符串,并在其上调用str
(或类似名称)以将其转换为文本字符串。这样,您就可以得到字节串的文本表示形式,而不是字节串是其编码的文本。
但是,如果该理论是完全正确的,那么您将把反斜杠加倍,如您在上面的示例中所见。因此,如果数据与您在OP中显示的数据完全一样,那么这并不完全适合。
但是,看起来代码在某些时候仍然具有字节,并将它们错误地转换为文本。我会强烈建议您通过查找发生的位置并进行修复来解决此问题,而不是在事后尝试更正此数据。