我收到一个文本文件,但其中的某些字符不正确。
一个示例是以下文本:
Apresentação/ divulgação do curso
但是正确的文本是
Apresentação/ divulgação do curso
我使用Php函数utf8_decode,它可以正常工作,请参见下面的示例
echo utf8_decode("Apresentação/ divulgação do curso");
result Apresentação/ divulgação do curso
但是我无法使其在Python中工作,我尝试使用
my_str = 'Apresentação/ divulgação do curso'
print( my_str.decode("utf-8") )
但是我遇到了以下错误:
AttributeError: 'str' object has no attribute 'decode'
如何使用Python进行这项工作?
答案 0 :(得分:2)
该字符串是将原始UTF-8字节解码为latin-1
的结果。因此,只需将它们重新编码为latin-1
,然后解码为utf-8
:
>>> my_str = 'Apresentação/ divulgação do curso'
>>> print( my_str.encode('latin-1').decode("utf-8") )
Apresentação/ divulgação do curso
如果该文件来自您用Python open
编写的文件,则可能使用latin-1
(或类似的cp1252
)作为open
的默认编码。在这种情况下,正确的解决方案是为open
提供正确的编码,以便首先对其进行正确解码,更改如下内容:
with open('myfile.txt') as f:
my_str = f.read()
收件人:
with open('myfile.txt', encoding='utf-8') as f:
my_str = f.read()
因此不需要其他encode
或decode
步骤。
答案 1 :(得分:1)
我认为初始文本在iso-8859-1中。这将解决它:
>>> s = 'Apresentação/ divulgação do curso'
>>> bytes(s, 'iso-8859-1').decode('utf-8')
'Apresentação/ divulgação do curso'