Я пытаюсь преобразовать группу китайских иероглифов в пиньинь, читая символы из одного файла и записывая пиньинь в другой. Я работаю с функциями CJKLIB, чтобы сделать это.
Вот код,
from cjklib.characterlookup import CharacterLookup
source_file = 'cities_test.txt'
dest_file = 'output.txt'
s = open(source_file, 'r')
d = open(dest_file, 'w')
cjk = CharacterLookup('T')
for line in s:
p = line.split('\t')
for p_shard in p:
for c in p_shard:
readings = cjk.getReadingForCharacter(c.encode('utf-8'), 'Pinyin')
d.write(readings[0].encode('utf-8'))
d.write('\t')
d.write('\n')
s.close()
d.close()
Моя проблема заключается в том, что я продолжаю сталкиваться с ошибками, связанными с Unicode, ошибка возникает при вызове функции getReadingForCharacter
. Если бы я назвал это так, как написано,
readings = cjk.getReadingForCharacter(c.encode('utf-8'), 'Pinyin')
Я получаю: UnicodeDecodeError: кодек «ascii» не может декодировать байт 0xef в позиции 0: порядковый номер не в диапазоне (128).
Если я назову это так, без .encoding()
,
readings = cjk.getReadingForCharacter(c, 'Pinyin')
Я получаю сообщение об ошибке, выдаваемое sqlalchemy (CJKLIB использует sqlalchemy и sqlite): вы не должны использовать 8-битные строки байтов, если вы не используете text_factory, который может интерпретировать 8-битные строки байтов ... и т. Д.
Может ли кто-нибудь мне помочь? Спасибо!
О, также, есть ли у CJKLIB способ вернуть пиньинь без каких-либо тонов? Я думаю, что по умолчанию он возвращает пиньинь с этими странными символами для представления тонов, я просто хочу буквы без этих тонов.