我尝试在 python 中读取一些以“euc-kr”编码的韩语文本文件,但出现了一些错误。检查后encodings
使用模块一段时间后,我了解到该模块以看似非常奇怪的方式对韩语字符进行编码。让我举个例子
韩国文字탇(这是一个很少使用的字符,但我需要这个作为发音词典)应该被编码为B5 6E根据 EUC-KR 规范(我提到这个网站 https://encoding.spec.whatwg.org/euc-kr.html)。但编码模块给了我一些不同的结果。
# 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 and euc_kr.codec.encode
给我的字节比我预期的要长。我不知道那里发生了什么。解码时如何避免出现错误B5 6E(以及许多其他韩国角色)?是否有另一个关于 EUC-KR 规范的文档,我可以阅读它来了解 EUC-KR 的 python 实现如何工作?
它看起来像euc_kr
结果是某种分解。你可以尝试cp949
,根据维基百科 https://en.wikipedia.org/wiki/Extended_Unix_Code:
Windows 的默认韩语代码页(代码页 949)是 EUC-KR 的专有但向上兼容的扩展...
一些实验:
>>> 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'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)