Python:UnicodeEncodeError:'latin-1'编解码器无法对字符进行编码

时间:2011-09-02 17:13:52

标签: python unicode

我收到此错误:

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)

当试图简单地打印一些日文文本时。实际上看起来字符串看起来像这样:

  

\ u5c5 \ u6c5 \ u65c5 \ u3012 \ u30c6 \ u30d4 \ u30af \ u30b7 \ u30fc \ u4e71 \ u7372 \ u884c \ u304e \ u305 \ u5e0c \ u671b \ u8005 \ u52df \ u96c6 \ u4e2d \ u3067 \ u3059 \ uff3e \ 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

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'

print(sys.stdout.encoding)是

ISO-8859-1

1 个答案:

答案 0 :(得分:4)

您看到的错误是因为您终端使用latin-1作为编码,作为旁注,您可以通过在shell中检查终端的编码(假设它是您的标准输出):

$ python -c "import sys; print sys.stdout.encoding"

现在要以UTF-8打印,您应该手动将字符串编码为utf-8,如下所示:

s = 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"
print s.encode('utf-8')
#Output: 光曜日でラテ ピクシー乱獲行きます 希望者募集中です^^