谁能解释造成这种情况的原因,以便更好地了解环境?
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']
Python 正在打印字符串表示形式,其中包括一个不可打印的字节。不可打印的字节(ASCII 范围或控制字符之外的任何内容)显示为转义序列。
关键是您可以复制该表示并将其粘贴到 Python 代码或解释器中,从而产生完全相同的值。
\xf6
转义码表示具有十六进制值 F6 的字节,当解释为 Latin-1 字节值时,它就是字符ö
。
您可能希望将该值解码为 Unicode 以一致地处理数据。如果您还不知道 Unicode 到底是什么,或者想了解有关编码的任何其他信息,请参阅:
每个软件开发人员绝对、绝对必须了解 Unicode 和字符集(没有任何借口!)作者:Joel Spolsky
Python Unicode HOWTO
Ned Batchelder 的实用 Unicode
在 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
python-mode.el
在为 Python3 调整打印表单之后
py-execute-buffer-python3
打印得很好:
你好世界
['Hello', 'world']
你好世界
['Hello', 'wörld']