使用Python转换字符

时间:2019-03-21 13:55:09

标签: python utf-8

我收到一个文本文件,但其中的某些字符不正确。

一个示例是以下文本:

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进行这项工作?

2 个答案:

答案 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()

因此不需要其他encodedecode步骤。

答案 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'