我在windows7中用sublime文本写了一个python文件,文件中有一些中文字符,所以当我运行它时,字符变得无法识别(cmd和git bash也是如此):
# -*- coding: utf-8 -*-
str = "测试"
print str
arr = []
arr.append(str)
print arr
结果是:
娴嬭瘯
['\xe6\xb5\x8b\xe8\xaf\x95']
我该如何解决这个问题?这个问题的原因是什么?并且arr
打印结果不应该像\uXXX
那样是unicode吗?
顺便说一句,没有# -*- 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搜索了这句话,为什么没有它就能运行代码呢?
答案 0 :(得分: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]
测试
答案 1 :(得分:3)
您正在看到字符串的UTF-8编码版本(顺便说一下,您不应将其命名为str
)。通过在脚本开头添加# -*- coding: utf-8 -*-
行,您告诉Python这是您的脚本使用的编码。你确定它实际上是在使用那种编码吗?
如果不是这种情况(请检查您的编辑器!)或者您的终端窗口(您print
字符串的位置)恰好使用不同的编码,您将获得乱码(或错误,如果编码的字符串不能用该编码来解释。)
只有当你解码你的(字节)字符串时,你才会得到一个Unicode对象。
首先,您需要了解终端的字符编码。然后你应该尽快将所有字符串转换为Unicode并且只操作程序中的Unicode对象,直到输出它们为止 - 此时你需要将它们编码为正确的编码。
例如
# -*- coding: utf-8 -*-
s = u"测试"
s = s + u"娴嬭瘯"
print s.encode("somecodepage")