字符串的一部分是UTF8编码的,无法解码

2024-06-16 11:39:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在分析一个文件,其中有一些utf8编码的文本和普通文本,如-

str = "Name: \xE1\x83\x92\xE1\x83\x90\xE1\x83\x9B\xE1\x83\x90\xE1\x83\xA0\xE1\x83\xAF\xE1\x83\x9D\xE1\x83\x91\xE1\x83\x90"

我已经用utf8编码打开了文件open("TEXT.txt", "r", encoding="utf8")

我希望打印(str)结果是Name: გამარჯობა

我已经尝试过再次编码和解码,它给了我意想不到的奇怪结果。而且,我不能用str.decode()来完全解码它,因为它显然已经解码了


Tags: 文件name文本编码utf8解码xa0str
1条回答
网友
1楼 · 发布于 2024-06-16 11:39:38

通过将字符串编码为“latin-1”以获取字节,然后解码为UTF-8,可以将字符串转换为预期值:

>>> s = "Name: \xE1\x83\x92\xE1\x83\x90\xE1\x83\x9B\xE1\x83\x90\xE1\x83\xA0\xE1\x83\xAF\xE1\x83\x9D\xE1\x83\x91\xE1\x83\x90"
>>> s.encode('latin-1').decode('utf-8')
'Name: გამარჯობა'

如果您使用的是Python2,那么问题中的字符串就是预期字符串的repr

>>> s = 'Name: გამარჯობა'
>>> s
'Name: \xe1\x83\x92\xe1\x83\x90\xe1\x83\x9b\xe1\x83\x90\xe1\x83\xa0\xe1\x83\xaf\xe1\x83\x9d\xe1\x83\x91\xe1\x83\x90'

它可以从UTF-8直接解码为unicode(假设UTF-8是Python 2解释器的默认编码):

>>> s = "Name: \xE1\x83\x92\xE1\x83\x90\xE1\x83\x9B\xE1\x83\x90\xE1\x83\xA0\xE1\x83\xAF\xE1\x83\x9D\xE1\x83\x91\xE1\x83\x90"
>>> s.decode('utf-8')
u'Name: \u10d2\u10d0\u10db\u10d0\u10e0\u10ef\u10dd\u10d1\u10d0'
>>> print s.decode('utf-8')
Name: გამარჯობა

相关问题 更多 >