Python: UnicodeEncodeError:'latin-1' 编码无法在该位置编码字符

5 投票
1 回答
29010 浏览
提问于 2025-04-17 01:16

我遇到了这个错误:

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)

我试着打印一些日文文本。实际上,这个字符串看起来是这样的:

\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

这个字符串是从一个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 个回答

4

你看到的这个错误是因为你的终端使用的是latin-1编码。顺便提一下,你可以通过在你的命令行中输入以下命令来检查终端的编码(假设这是你的标准输出):

$ 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: 光曜日でラテ ピクシー乱獲行きます 希望者募集中です^^

撰写回答