我收到此错误:
File "run.py", line 37, in <module>
print str1
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 24-29: ordinal not in range(256)
Run Code Online (Sandbox Code Playgroud)
尝试简单地打印一些日语文本时。实际上,字符串看起来像这样:
\u5149\u66dc\u65e5\u3067\u30e9\u30c6\u30d4\u30af\u30b7\u30fc\u4e71\u7372\u884c\u304d\u307e\u3059\u60d\u65ec\u3059\u60ec\u65ec\u3059\u60ec\u65ec\u65ec6\u50c\u60d305c \uff3e
它来自一个 JSON 文件。我怎样才能打印这个?
代码:
url = "http://www.blah.com/json"
try:
result = simplejson.load(urllib2.urlopen(url))
except IOError:
print "Cannot open URL"
data = "error"
for msg in result["msg"]:
str1 = msg["character"] + " : " + msg["message"]
print str1
Run Code Online (Sandbox Code Playgroud)
repr(str1) 是
u'Anys : \u5149\u66dc\u65e5\u3067\u30e9\u30c6 \u30d4\u30af\u30b7\u30fc\u4e71\u7372\u884c\u304d\u307e\u3059 \u5e0c\u671b\u8005\u52df\u96c6\u4e2d\u3067\u3059\uff3e\uff3e'
Run Code Online (Sandbox Code Playgroud)
打印(sys.stdout.encoding)是
ISO-8859-1
Run Code Online (Sandbox Code Playgroud)
您看到的错误是因为您的终端使用 latin-1 作为编码,作为旁注,您可以通过在 shell 中执行以下操作来检查终端的编码(假设它是您的标准输出):
\n\n$ python -c "import sys; print sys.stdout.encoding"\nRun Code Online (Sandbox Code Playgroud)\n\n现在要以 UTF-8 打印,您应该像这样手动将字符串编码为 utf-8:
\n\ns = u"\\u5149\\u66dc\\u65e5\\u3067\\u30e9\\u30c6 \\u30d4\\u30af\\u30b7\\u30fc\\u4e71\\u7372\\u884c\\u304d\\u307e\\u3059 \\u5e0c\\u671b\\u8005\\u52df\\u96c6\\u4e2d\\u3067\\u3059\\uff3e\\uff3e"\nprint s.encode(\'utf-8\')\n#Output: \xe5\x85\x89\xe6\x9b\x9c\xe6\x97\xa5\xe3\x81\xa7\xe3\x83\xa9\xe3\x83\x86 \xe3\x83\x94\xe3\x82\xaf\xe3\x82\xb7\xe3\x83\xbc\xe4\xb9\xb1\xe7\x8d\xb2\xe8\xa1\x8c\xe3\x81\x8d\xe3\x81\xbe\xe3\x81\x99 \xe5\xb8\x8c\xe6\x9c\x9b\xe8\x80\x85\xe5\x8b\x9f\xe9\x9b\x86\xe4\xb8\xad\xe3\x81\xa7\xe3\x81\x99\xef\xbc\xbe\xef\xbc\xbe\nRun Code Online (Sandbox Code Playgroud)\n