python和ipython似乎对unicode字符的处理方式不同

时间:2016-10-14 02:28:31

标签: python unicode ipython anaconda

我在Windows 10上从anaconda运行python 2.7.12。包括在发行版中的是ipython 5.1.0。我编写了一个程序来在mysql数据库中打印查询行的某些列。列包含unicode中的字符串。当程序在python中运行时,首次看到其中一个字符串中的unicode字符时会抛出异常。 ipython中的相同程序可以正常显示所有字符。

我已将问题提炼成一个单独的小程序,如下所示:

name = u'O\u2019Connor'
try:
   print name
except:
   print "exception 1 thrown"

try:
   print u"{}".format(name)
except:
   print "exception 2 thrown"

try:
   print u"%s" % name
except:
   print 'exception 3 thrown'

使用python运行时,每次都会抛出异常。在ipython中运行时,所有三个打印语句都有效。显然,在处理unicode的方式上,两个版本之间存在差异。有什么区别,我该怎么做才能让我的程序处理在任何一个环境中运行?

1 个答案:

答案 0 :(得分:0)

看起来ipython正在使用一个合理的默认输出编码(可能是UTF-8或UTF-16),而普通的Python正在使用cp437,这是一个有限的每字符一个字节的ASCII超集,可以&#39 ; t表示整个Unicode范围。

如果您可以控制命令提示符,则可以在启动Python之前运行chcp 65001以使其使用"代码页"对于UTF-8(Python应该接受)。您可能想要制作此the default for command prompts in general to avoid future problems