Python 和对 EUC-KR 的支持

问题描述 投票:0回答:1

我正在尝试使用 python 3.10 中的字符串编码,特别是为了演示 yen/won/backslash 编码问题。

所以以下行为(不可逆映射)对我来说很有意义:

>>> "¥".encode("shift-jis").decode("shift-jis")
'\\'

我还可以用我的 iconv 副本进行验证:

$ echo -n "¥" | iconv -f utf-8 -t shift-jis | hexdump
0000000 005c
0000001

现在我很难理解以下行为:

>>> "₩".encode("euc-kr")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'euc_kr' codec can't encode character '\u20a9' in position 0: illegal multibyte sequence

同时:

$ echo -n "₩" | hexdump
0000000 82e2 00a9
0000003
$ echo -n "₩" | iconv -f utf-8 -t euc-kr | hexdump
0000000 dca3
0000002
$ echo -n "₩" | iconv -f utf-8 -t euc-kr | iconv -f euc-kr -t utf-8 | hexdump
0000000 bfef 00a6
0000003

我对KS X 1001(注册为ISO-IR 149)的天真的理解是,

真的是
\
*):

KS X 1001 的编码方案包括 EUC-KR(ASCII 和 ISO 基于 646-KR 的变体,后者包括韩元货币 字节 0x5C 处的符号 (₩) 而不是反斜杠)

我对

KS X 1001
有什么误解?

  1. 为什么 python 不返回
    \
    符号?
  2. 为什么 iconv 为
    dca3
    (U+20A9,WON SIGN)返回代码
    (U+FFE6 FULLWIDTH WON SIGN)?

供参考:

$ python3 --version
Python 3.10.12

$ iconv --version
iconv (Ubuntu GLIBC 2.35-0ubuntu3.6) 2.35
python character-encoding iconv
1个回答
0
投票

问题是 Unicode 有两个韩元符号:U+20A9 韩元符号U+FFE6 全角韩元符号。 Python 已经实现了全角版本,但您正在测试另一个版本。他们这样做可能正是为了避免您正在测试的问题。这很好用:

"\uffe6".encode("euc-kr")
b'\xa3\xdc'
© www.soinside.com 2019 - 2024. All rights reserved.