Python: UnicodeEncodeError: кодек «latin-1» не может кодировать символы в позиции - PullRequest
3 голосов
/ 02 сентября 2011

Я получаю эту ошибку:

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)

При попытке просто напечатать какой-нибудь японский текст.На самом деле кажется, что строка выглядит следующим образом:\ u5e0c \ 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 голосов
/ 02 сентября 2011

Ошибка, которую вы видите, заключается в том, что вы используете в качестве кодировки латиницу-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: 光曜日でラテ ピクシー乱獲行きます 希望者募集中です^^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...