6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python での shift_jis と shift_jis_2004 について

Last updated at Posted at 2012-12-26

最近文字コードについて調べてたら?なことがあったのでアウトプット。
簡単に言うと、

hoge.py
hoge = ''  # Python 3 なので Unicode
print(hoge.encode('sjis'))  # UnicodeEncodeError
print(hoge.encode('sjis_2004'))  # b'\x87\x40'

という話。

「①?機種依存文字でしょ?そんなん使うなよ」というのは今は昔の話で、符号化文字の JIS 規格の最新版 (JIS X 0213:2004) では①から㊿までが (連続でありませんが) 規定されており、いわゆる JIS2004 対応フォントであれば問題なく使用することができます。(例:Windows Vista 標準のメイリオ、Mac OS X (10.5 以降) 標準のヒラギノ)
いつも Shift_JIS で出力するときはサボって 'sjis' と書いてたのでエラーが出て面食らってしまいました。

で、結論としては sjis は Shift_JIS のエイリアスであって、Shift_JIS-2004 のエイリアスではないよーというなんていうことのない話でした。参考:6.6. codecs — Codec registry and base classes — Python v3.2.2 documentation

Shift_JIS-2004 は Shift_JIS の上位互換っぽいし (Shift_JIS + 第三、第四水準漢字)、Shift_JIS-2004 のエイリアスとして動いても問題なさそうなんですが、過去のコードが動かなくなるリスクを背負うよりは今後のコードに一手間入れた方が安全ってことなんでしょうか。

※余談
上記のドキュメントには sjis2004 も shift_jis_2004 の Aliases に入ってるのに、実行してみたら LookupError でそんなエンコーディングねーよでした。バグ?

※追記 2012/02/13-6:10
Lib/encodings/aliases.py にエイリアスの一覧があった。sjis2004 の代わりに s_jis_2004 なるものが。
どうやらドキュメントと aliases の差異については 2005 年の段階で既に報告済みみたいだけど、どうみてもプライオリティ高くないし後回しになってる模様。

6
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?