проблема чтения текстового файла в python utf8 - PullRequest
1 голос
/ 24 мая 2010

У меня проблема с python по поводу чтения и печати текстового файла utf8.

У меня есть test.txt в кодировке utf8 без спецификации.Этот файл содержит два символа:

大声

Первый символ «大» - китайский, а второй «声» - японский.Теперь, когда я использую Ulipad (редактор python), чтобы запустить следующий код для чтения текстового файла и распечатать эти два символа.

import codecs
infile = "C:\\test.txt"

f = codecs.open(infile, "r", "utf-8")
s = f.read()

print(s)

Я получил эту ошибку,

"UnicodeEncodeError: 'cp950' codec can't encode character '\u58f0' in position 1:
 illegal multibyte sequence"

Я обнаружил, что это вызвано вторым символом "声".

Но когда я использую тот же код для тестирования в Python GUI IDLE по умолчанию, он работает для печати двух символов без ошибок.Итак, как я могу решить эту проблему.

Моя рабочая среда - Python 3.1, Windows XP традиционный китайский.

Ответы [ 2 ]

7 голосов
/ 24 мая 2010

Вы получаете ошибку при печати, потому что:

(1) Ulipad печатает в sys.stdout, который является стандартным выводом устаревшего окна командной строки MS-DOS.(2) Ваша традиционная китайская Windows XP использует кодировку cp950, которая представляет собой big5 плюс трюки Microsoft.(3) Вы говорите, что ваш второй персонаж - японский, под которым вы, вероятно, подразумеваете, что он не является также китайским и, следовательно, вряд ли будет действительным символом в big5 +.

С другой стороны, IDLE пишет в собственное окно ине привязан к колесу MS-DOS :-) ... так что есть гораздо больший набор символов, которые он может печатать.

0 голосов
/ 25 мая 2010

声 может быть японским, но это также упрощенный китайский для «звука» (традиционный 聲).cp950 является традиционным китайским языком и не поддерживает этот упрощенный символ.

Поскольку вы используете китайскую версию Windows, вы можете изменить кодовую страницу по умолчанию на cp936 (унифицированный китайский) и просмотреть вывод.

Я незнаком с Ulipad, но попробуйте запустить в консоли Windows:

chcp 936

и затем запустить свой скрипт.Если это не сработает, вы можете изменить язык по умолчанию для программ, не поддерживающих Юникод, с помощью панели управления, региональных и языковых параметров, вкладки «Дополнительно».Вот как я смог напечатать китайский язык на консоли в Windows на базе английского языка в США.

Обновление

Читая об Ulipad, он говорит:

Поддержка мультиязычности В настоящее время поддерживается 4 языка: английский, испанский, упрощенный китайский и традиционный китайский, которые могут распознаваться автоматически.

Возможно, вы можете отменить авто-определенный традиционный китайский - упрощенный китайский, который может выбрать кодовую страницу и / или шрифт, который поддерживает этот конкретный символ.Поскольку он не поддерживает японский язык, вероятно, все еще будут символы, которые вы не сможете отобразить должным образом.

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