在Python中读取.dic文件

时间:2011-10-24 17:01:47

标签: python encoding

我有一个法语词典文件,我从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 个答案:

答案 0 :(得分:4)

latin1又称ISO-8859-1是“陷阱和妄想”。使用latin1解码随机二进制乱码“有效”,因为latin1编解码器映射全部256个字节到Unicode代码点。

在这种情况下给出信息(1)法语(2)“WinEdt.org”(你好你好,那是“Windows”中的“Win”)。该文件可能以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越南语