我试图读取python中以‘euc’编码的一些韩文文本文件,但出现了一些错误。在对encodings模块进行了一段时间的检查之后,我了解到这个模块对韩国字符的编码方式似乎很奇怪。让我举个例子
韩国字符탇 (这是一个很少使用的字符,但我需要它作为发音字典)应该按照EUC规范(我指的是本站)编码到B5 6E。但是编码模块给了我一些不同的结果。
# python3
>> from encodings import euc_kr
>> euc_kr.codec.decode(b'\xB5\x6E')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'euc_kr' codec cant decode byte 0xb5 in position 0: illegal multibyte sequence
>> euc_kr.codec.encode('탙')
(b'\xa4\xd4\xa4\xbc\xa4\xbf\xa4\xbc', 1)正如您所看到的,当我试图解码B5 6E时会出现一个错误,euc_kr.codec.encode给出的字节比我预期的要长。我不知道那里发生了什么。当我解码B5 6e(和许多其他韩国字符)时,如何避免引发错误?还有关于EUC规范的另一份文档,我可以阅读这些文档来理解python实现EUC是如何工作的吗?
发布于 2017-10-16 15:55:00
看起来euc_kr的结果是某种分解。你可以试试cp949,根据维基百科的说法
默认的韩国Windows代码页(代码页949)是一个专有的,但向上兼容的扩展EUC.
一些试验:
>>> s = '탇'
>>> ud.name(s)
'HANGUL SYLLABLE TAD'
>>> s.encode('euc_kr')
b'\xa4\xd4\xa4\xbc\xa4\xbf\xa4\xa7'
>>> s.encode('euc_kr').decode('cp949')
'ㅤㅌㅏㄷ'
>>> for c in s.encode('euc_kr').decode('cp949'):
... print(ud.name(c))
...
HANGUL FILLER
HANGUL LETTER THIEUTH
HANGUL LETTER A
HANGUL LETTER TIKEUT
>>> s.encode('cp949').hex()
'b56e'https://stackoverflow.com/questions/46769520
复制相似问题