Python列出了斯堪的纳维亚字母

时间:2013-07-01 11:50:10

标签: python list encoding

任何人都可以解释是什么原因造成的,以便更好地了解环境?

emacs,unix

输入:

with open("example.txt", "r") as f:
    for files in f:
        print files
        split = files.split()
        print split

输出:

Hello world
['Hello', 'world']
Hello wörld
['Hello', 'w\xf6rld']

3 个答案:

答案 0 :(得分:10)

Python正在打印字符串表示,其中包含一个不可打印的字节。不可打印的字节(ASCII范围之外的任何内容或控制字符)显示为转义序列。

重点是您可以复制该表示并将其粘贴到Python代码或解释器中,从而产生完全相同的值。

\xf6转义码表示十六进制值为F6的字节,当解释为Latin-1字节值时,为ö字符。

您可能希望将该值解码为Unicode以一致地处理数据。如果你还不知道Unicode究竟是什么,或者想知道关于编码的任何其他信息,请参阅:

答案 1 :(得分:2)

在python中,只使用unicode编码打印列表。基本上打印列表会使列表在每个元素上调用__repr__(这会导致字符串的unicode打印)。如果你自己打印每个元素(在这种情况下使用字符串__str__方法,而不是列表)你得到你期望的。

with open("example.txt", "r") as f:
    for inp in f:
        files = inp.decode('latin-1') // just to make sure this works on different systems
        print files
        split = files.split()
        print split
        print split[0]
        print split[1]

输出:

hello world

[u'hello', u'world']
hello
world
hello wörld
[u'hello', u'w\xf6rld']
hello
wörld

答案 2 :(得分:0)

蟒-mode.el

在调整Python3的打印表单后

py-execute-buffer-python3

打印得很好:

Hello world

['Hello', 'world']

Hellowörld

['Hello', 'wörld']