Python UTF-8 日文
我有一些日文单词想要转换成utf-8格式,如下所示:
jap_word1 = u'中山'
jap_word2 = u'小倉'
print jap_word1.encode('utf-8') # Doesn't work
print jap_word2.encode('utf-8') # Prints properly
为什么有一个单词可以正确转换成utf-8并且打印出来显示相同的字符,而另一个却不行呢?
(我在Windows 7 Ultimate上使用的是python 2.6)
2 个回答
0
因为你的控制台不是用UTF-8编码的。在运行之前,先输入 chcp 65001
这个命令。
1
要正确打印字符,有很多事情需要对齐:
- 你的脚本是用什么编码保存的?
- 你的脚本里有
# coding: xxxx
这样的声明吗?其中的 xxxx 要和文件保存时的编码一致。 - 你的输出终端支持这种编码吗?可以用
import sys; print sys.stdout.encoding
来查看。- 如果不支持,你能改变控制台的编码吗?(在Windows上可以用
chcp
命令)
- 如果不支持,你能改变控制台的编码吗?(在Windows上可以用
- 你使用的字体支持这些字符吗?
如果把脚本保存为UTF-8格式,这在PythonWin和IDLE中都能正常工作。
# coding: utf-8
jap_word1 = u'中山'
jap_word2 = u'小倉'
print jap_word1
print jap_word2
有趣的是,我在IDLE中加上了 .encode('utf-8')
后,两个打印结果都得到了预期的效果,但在PythonWin中就没问题,因为它的默认输出窗口支持UTF-8。
IDLE有点奇怪。在我的系统中, sys.stdout.encoding
显示的是 'cp1252'
,这不支持亚洲字符,但在打印UTF-8时,第一个单词打印错了,第二个却对了。