1

我在windows7中用sublime text写了一个python文件,文件里面有一些汉字,所以我运行的时候,字符变得无法识别(cmd和git bash也是这样):

# -*- coding: utf-8 -*- 
str = "测试"

print str

arr = []
arr.append(str)

print arr

结果是:

娴嬭瘯
['\xe6\xb5\x8b\xe8\xaf\x95']

我怎么解决这个问题?这个问题的原因是什么?并且arr打印结果不应该像 unicode 一样\uXXX

顺便说一句,没有# -*- coding: utf-8 -*-我什至无法运行它:

$ python test.py
  File "test.py", line 2
SyntaxError: Non-ASCII character '\xe6' in file test.py on line 2, but no encodi
ng declared; see http://www.python.org/peps/pep-0263.html for details

我刚刚google了一下语句,为什么没有它代码不能运行?

4

2 回答 2

4

# -*- coding: utf-8 -*-需要指定文件中使用的编码

您得到['\xe6\xb5\x8b\xe8\xaf\x95']输出是因为您的字符串是字节字符串而不是 unicode 字符串,请在字符串中添加u前缀以将其转换为 unicode 字符串。

>>> strs = u"测试"
>>> lis = [strs]
>>> print lis
[u'\u6d4b\u8bd5']
>>> print lis[0]
测试
于 2013-08-04T11:02:21.773 回答
3

您看到的是字符串的 UTF-8 编码版本(str顺便说一下,您不应该命名)。通过在脚本的开头添加该# -*- coding: utf-8 -*-行,您就是在告诉 Python 这就是您的脚本正在使用的编码。您确定它实际上使用的是该编码吗?

如果不是这种情况(检查你的编辑器!)或者如果你的终端窗口(你正在print输入字符串的地方)碰巧使用了不同的编码,你会得到乱码(或者如果编码的字符串不能被解释则错误在那个编码中)。

只有当你解码你的(字节)字符串时,你才会得到一个 Unicode 对象。

所以首先你需要知道你的终端的字符编码。然后,您应该尽快将所有字符串转换为 Unicode,并在程序中仅操作 Unicode 对象,直到输出它们——此时您需要将它们编码为正确的编码。

例如

# -*- coding: utf-8 -*- 
s = u"测试"
s = s + u"娴嬭瘯"
print s.encode("somecodepage")
于 2013-08-04T11:02:28.523 回答