4

谁能解释造成这种情况的原因,以便更好地了解环境?

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']
4

3 回答 3

10

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

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

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

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

于 2013-07-01T11:51:15.370 回答
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
于 2013-07-01T12:12:13.793 回答
0

python-mode.el

在为 Python3 调整打印表单之后

py-execute-buffer-python3

打印得很好:

你好世界

['Hello', 'world']

你好世界

['Hello', 'wörld']
于 2013-07-01T13:01:16.790 回答