【问题标题】:convert utf-8 byte to string python将 utf-8 字节转换为字符串 python
【发布时间】: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


【解决方案1】:
string = "Kr\xc3\xb6ger"
print(bytes(string, "raw_unicode_escape").decode("utf-8"))

给予

Kröger

【讨论】:

  • 谢谢@alaniwi,我错过了"raw_unicode_escape"。
【解决方案2】:

首先您必须将其编码为字节,然后从 utf-8 解码:

>>> s = 'Kr\xc3\xb6ger'
>>> s.encode("raw-unicode-escape")
b'Kr\xc3\xb6ger'
>>> s.encode("raw-unicode-escape").decode('u8')
'Kröger'
>>>

【讨论】:

    猜你喜欢
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2011-07-01
    相关资源
    最近更新 更多