我有一个法语词典文件,我从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
我该如何阅读此文件?我还需要阅读该网站的一些其他字典文件。我该怎么做?
答案 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越南语