任何人都可以解释是什么原因造成的,以便更好地了解环境?
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']
答案 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']