Python STILL не разрешает японские символы, несмотря на указание кодировки - PullRequest
2 голосов
/ 05 июля 2011
#!/usr/bin/env python
# -*- coding: utf8 -*-
print "私"
print u"私"

результат:

ç§
UnicodeEncodeError: 'ascii' codec can't encode character u'\u79c1' in position 0: ordinal not in range(128)

Или в режиме ожидания для u "私" и "私":

>>> print "私"
Unsupported characters in input

Я следовал всем советам, которые я могу найти, который говорит, что я должен поместить строку «кодирования» под шебангом. Все мои веб-браузеры хорошо отображают кандзи, и я могу напечатать его отлично. Но эта ошибка вылезает, когда я пытаюсь использовать ее в Python :( Есть идеи?

Ответы [ 4 ]

6 голосов
/ 05 июля 2011

Вы указали кодировку исходного файла и предположительно сохранили файлы, используя UTF-8.

Тем не менее, ваш stdout использует ascii, поэтому обычно происходит сбой.

У вас проблема с кодировкой, а не проблема с декодированием, Python отлично читает ваши символы Юникода, вероятно, сможет сохранить их в файле, если вы выберете правильную кодировку.

Тем не менее, stdoutне всегда совместим с Юникодом, особенно в Windows.

Вы можете сделать что-то вроде этого: sys.stdout.write(strin.encode(utf-8)), и вы не получите сообщение об ошибке, но это не значит, что вы увидите символы на экране.

3 голосов
/ 07 июля 2011

Вам нужен терминал или IDE, которые поддерживают UTF8, или, по крайней мере, кодировку, которая поддерживает японский язык. PythonWin из библиотеки расширений Pywin32 является интегрированной средой разработки, которая будет работать.

2 голосов
/ 06 июля 2011

Попробуйте это:

#!/usr/bin/env python
# -*- coding: utf8 -*-
print unicode("私","UTF-8")
0 голосов
/ 05 июля 2011

ответ Сорина правильный. Есть еще один вопрос, который касается той же основы: Установка правильной кодировки при передаче stdout в Python

Python применяет кодировку по умолчанию, когда записывает вывод, и эта кодировка не UTF-8.

Ошибка из IDLE заключается в том, что IDLE интерпретирует ввод в соответствии с системным языком. Windows не предоставляет локаль, которая принимает ввод UTF-8, поэтому по умолчанию не допускается произвольный Юникод. Вы можете изменить значение по умолчанию с помощью простых инструкций в этом ответе . Вы все равно получите неправильный вывод без перекодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...