-2

我正在使用 Python 2.7

我正在阅读一个包含“iso-8859-1”编码信息的文件。解析后,我得到字符串的结果,即s1

>>> s1
'D\xf6rfli'
>>> type(s1)
<type 'str'>
>>> s2=s1.decode("iso-8859-1").encode("utf8")
>>> s2
'D\xc3\xb6rfli'
>>> type(s2)
<type 'str'>
>>> print s1, s2
D�rfli Dörfli
>>> 

为什么调用后的类型s2仍然是 a ?我怎样才能将它从 转换为?str.encodestrutf-8

4

2 回答 2

2

str在 Python 2 中表示编码字符串,即字节序列。这是记录在案的行为。解码 后的str类型为unicode.

UTF-8是一种编码,也是ISO-8859-1。所以你只需解码你的字符串,然后用另一种编码编码,产生相同类型的数据。

相反,在 Python 3str中将是一个文本字符串(在 Unicode 中),调用encode它会给你一个bytes.

因此,在 Python 2 中,UTF-8 字符串将是str,因为它是经过编码的。

我赞同 Ned 的建议:看看他链接到的演示文稿(哦,天哪,这是他自己的演讲吗?)。当我在这些事情上挣扎时,它帮助了我很多。

于 2013-01-06T12:51:59.813 回答
1

我不确定这是否能回答你的问题,但这是我观察到的。

如果您只想将字符串转换为可打印的形式,只需在调用 decode 后停止。我不确定您为什么在成功从 is8859 转换为 unicode 后尝试编码为 UTF8。

>>> s1 = 'D\xf6rfli'
>>> s1
'D\xf6rfli'
>>> s2 = s1.decode("iso-8859-1")
>>> s2
u'D\xf6rfli'
>>> print s2
Dörfli
>>> 
于 2013-01-06T12:53:57.500 回答