Чтение в .dic файле на Python - PullRequest
1 голос
/ 24 октября 2011

У меня есть файл французского словаря, который я получил от WinEdt.org (Zip File) . Я хотел бы прочитать этот файл в память, но когда я делаю, я получаю ошибку:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in
  position 69: ordinal not in range(128)

Я также пытался использовать модуль codecs с кодировкой utf-8, но он тоже не работает:

    with codecs.open(self.template_folder_path + "/" + self.test_language + ".txt",
                     'rb', encoding='utf-8') as fp:
        word_list = []

        for line in fp:
            word_list.append(line.strip())

        self.words[self.test_language] = word_list

Как я могу прочитать этот файл? Мне также нужно прочитать несколько других словарных файлов с этого сайта. Как мне это сделать?

1 Ответ

4 голосов
/ 24 октября 2011

latin1 aka ISO-8859-1 - это «ловушка и заблуждение». Декодирование случайного двоичного разбоя с latin1 «работает», потому что кодек latin1 отображает все 256 байтов в Unicodecodepoint.

В этом случае предоставляется информация (1) по-французски (2) "WinEdt.org" (привет, привет, это "Win", как в "Windows").файл может быть закодирован в cp1252.

>>> guff = open('fr.dic', 'rb').read()
>>> z = guff.decode('latin1')
>>> sum((128 <= ord(c) < 160) for c in z) # count the C1 control characters
141 
>>> aliens = set(c for c in z if 128 <= ord(c) < 160)
>>> aliens
set([u'\x9c'])
>>> from unicodedata import name
>>> name(u'\x9c')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: no such name
>>> name('\x9c'.decode('cp1252'))
'LATIN SMALL LIGATURE OE'

QED

Обновление: Вы спрашивали о других файлах на этом сайте.Первое, что нужно сделать, - это (как рекомендует сайт) прочитать файл .TXT, связанный со словарем.Например, в файле .TXT большого русского словаря написано «В словаре используется стандартная русская кодовая страница Windows (1251)».В противном случае попробуйте наиболее подходящие из этого списка:

cp1250 латинские восточноевропейские шрифты, например, польский, чешский, сербский (латинский алфавит)
cp1251 кириллические шрифты, например русский, украинский, сербский (кириллический)скрипт)
cp1252 западноевропейские латинские скрипты, например, немецкий, французский
cp1253 греческий
cp1254 турецкий
cp1255 иврит
cp1256 арабский
cp1257 эстонский, латышский и литовский
cp1258 вьетнамский

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