我在向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;打印出来吗?
谢谢!
答案 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')
工作正常。