wiki:PythonJISX0213

Version 1 (modified by sgk, 10 years ago) (diff)

--

Pythonで「㍑」でハマる

ダメ
>>> u'\u3351'.encode('iso-2022-jp')
>>> u'\u3351'.encode('sjis')
>>> u'\u3351'.encode('euc-jp')
うまくいく
>>> u'\u3351'.encode('utf-8')
>>> u'\u3351'.encode('cp932')
>>> u'\u3351'.encode('iso-2022-jp-2004')
>>> u'\u3351'.encode('eucjis2004')

「\u3351」は「㍑」です。

 Python内蔵のコーデックは割とクソまじめで、エンコーディング方式の微妙な違いをちゃんと区別する。「iso-2022-jp」「sjis」「euc-jp」は ISO-2022-JP相当の文字しか表現できない。ここには、通称「JIS2004」の JIS X 0213で追加された文字を含まない。このため、「㍑」をエンコードできなくてエラーになる。