【发布时间】:2018-03-27 22:16:00
【问题描述】:
我尝试在 python 中读取一些以“euc-kr”编码的韩文文本文件,但出现了一些错误。在检查了encodings模块一段时间后,我了解到这个模块编码韩文字符的方式似乎很奇怪。举个例子吧
韩文字符 탇 (这是一个很少使用的字符,但我需要这个用于发音字典)应该根据 EUC-KR 规范编码为 B5 6E (我提到了this site)。但是 encodings 模块给了我一些不同的结果。
# 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-KR 规范的文档可供我阅读以了解 EUC-KR 的 python 实现如何工作?
【问题讨论】:
-
是的,这很奇怪。我不熟悉 euc 编码,但我不明白为什么
euc_kr.codec.encode('탙')在 euc_kr 应该将每个代码点编码为 1 或 2 个字节时会产生这么多字节。顺便说一句,你不需要使用euc_kr.codec.encode(s),你可以使用s.encode('euc_kr')。
标签: python unicode encoding character-encoding