首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python以意想不到的方式用euc编码(编解码、编码模块)对(韩文)字符进行编码。

Python以意想不到的方式用euc编码(编解码、编码模块)对(韩文)字符进行编码。
EN

Stack Overflow用户
提问于 2017-10-16 11:42:53
回答 1查看 8K关注 0票数 5

我试图读取python中以‘euc’编码的一些韩文文本文件,但出现了一些错误。在对encodings模块进行了一段时间的检查之后,我了解到这个模块对韩国字符的编码方式似乎很奇怪。让我举个例子

韩国字符 (这是一个很少使用的字符,但我需要它作为发音字典)应该按照EUC规范(我指的是本站)编码到B5 6E。但是编码模块给了我一些不同的结果。

代码语言:javascript
复制
# 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是如何工作的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-16 15:55:00

看起来euc_kr的结果是某种分解。你可以试试cp949,根据维基百科的说法

默认的韩国Windows代码页(代码页949)是一个专有的,但向上兼容的扩展EUC.

一些试验:

代码语言:javascript
复制
>>> 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'
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46769520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档