【发布时间】:2020-07-05 19:57:00
【问题描述】:
我已经知道如果我想在 'utf-8' 中编码和解码一个字符串,我可以这样做......
string = "Kröger"
print(string.encode('utf-8'))
>> b'Kr\xc3\xb6ger'
print(b'Kr\xc3\xb6ger'.decode('utf-8')
>> Kröger
如果我有一个字符串'Kr\xc3\xb6ger',但没有指定它是<class bytes>(缺少前缀'b'),我将如何解码?
编辑:
如果有帮助,我有一个标记化列表:['K', 'r', '\\xc3\\xb6', 'g', 'e', 'r']
【问题讨论】:
-
你有
'Kr\xc3\xb6ger'或'Kr\\xc3\\xb6ger'吗?字符串的长度是多少? -
'Kr\xc3\xb6ger',len(striing) = 7 -
这是mojibake,即。使用错误的编解码器从字节解码的字符串。具体来说,Latin-1 用于解码而不是 UTF-8。您可以通过反向编码/解码来撤消损坏:
'Kr\xc3\xb6ger'.encode('latin1').decode('utf8') -
@lenz,谢谢。我从一个德语单词语料库中提取了这个词。
-
在这种情况下,您可能希望在加载数据时检查您是否正确解码(例如,当
open读取文件时明确指定encoding='utf8')。
标签: python arrays string utf-8