python2.7 - чтение словаря из файла .txt, пронизанного юникодом - PullRequest
3 голосов
/ 22 ноября 2011

Некоторое время назад я записался на курс по китайскому языку, и я подумал, что для меня было бы отличным упражнением написать программу на флэшкарте на python.Я храню списки флэш-карт в словаре в файле .txt, пока без проблем.Реальные проблемы возникают, когда я пытаюсь загрузить файл, закодированный в utf-8, в мою программу.Выдержка из моего кода:

import codecs

f = codecs.open(('list.txt'),'r','utf-8')
quiz_list = eval(f.read())

quizy = str(quiz_list).encode('utf-8')

print quizy

Теперь, если, например, list.txt состоит из:

{'character1':'男人'}

то, что напечатано, на самом деле

{'character1': '\xe7\x94\xb7\xe7\x86\xb1'}

Очевидно,здесь есть некоторые серьезные проблемы с кодированием, но я не могу понять, , где они происходят.Я работаю с терминалом, который поддерживает utf-8, поэтому не стандартный cmd.exe: это не проблема.Чтение обычного list.txt без фигурных dict-битов без проблем возвращает китайские символы, поэтому я предполагаю, что я неправильно обрабатываю часть словаря.Любые мысли будут с благодарностью!

Ответы [ 2 ]

3 голосов
/ 22 ноября 2011

Нет ничего плохого в вашей кодировке ... Посмотрите на это:

>>> d = {1:'男人'}
>>> d[1]
'\xe7\x94\xb7\xe4\xba\xba'
>>> print d[1]
男人

Одна вещь - это печать строки в юникоде, другая - печать ее представления.

2 голосов
/ 22 ноября 2011

str(quizy) вызывает repr(quizy['character1']), что создает ASCII-представление строкового значения.Если вы просто print quizy['character1'], вы увидите, что коды символов являются Unicode в строке Python.

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