Unicode,打印到stdout,发生了什么?

时间:2017-06-02 17:36:44

标签: python unicode

我在向stdout打印数据时遇到问题。我理解Unicode和Ascii的概念,但我不明白为什么打印指令不起作用。

我正在玩电脑游戏的JSON文件中的数据,Fallout Shelter。

当我尝试使用以下方式打印数据时

   for i in jsondata["dwellers"]["dwellers"]:
        print "{},{} {},{}".format(f,i["name"],i["lastName"],i["relations"])

我收到错误:

Traceback (most recent call last):
  File "f:\FOSScript\Tree.py", line 81, in <module>
    tree()
  File "f:\FOSScript\Tree.py", line 76, in tree
    graphing(jsondata)
  File "f:\FOSScript\Tree.py", line 35, in graphing
    print "{} {}".format(i["name"],i["lastName"])
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 3: ordinal not in range(128)

你&#39; \ xe9&#39;是法国口音。

但在代码中,当我这样做时:

prenom = u'Val\xe9rie'
print prenom

名称打印正确。

以下说明:

print locale.getpreferredencoding()
print sys.stdout.encoding

打印以下内容:

cp1252
cp850

两个代码页(在维基百科上检查)都包含重音字符。

我使用的是法语 - 加拿大版本的Windows 10。 Python 2.7.13。

==========================

  • 为什么表中的打印不起作用,但打印变量有效?

  • this页面上,有评论说

  

Python中唯一支持的默认编码是:

     

Python 2.x:ASCII
   Python 3.x:UTF-8

当他们说ASCII时,他们是指带重音的扩展ASCII,因为JSON数据包含重音符号,python只是&#34;无法&#34;打印出来吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

问题是您正在尝试在带有unicode字符的非unicode字符串上使用字符串格式。相反,你想要:

for i in jsondata["dwellers"]["dwellers"]:
        print u"{},{} {},{}".format(f,i["name"],i["lastName"],i["relations"])

注意第二行中引号之前的额外u。

在python 2.7上测试它

print u"{}".format(u'\xe9')

工作正常。