Shift_JISX0213 (Shift_JIS_2004) はどこで使われていますか?

投稿者: Anonymous

Python やそのほかのプログラミング言語、プラットフォームで、Shift_JIS っぽい日本語のデータをデコードするのに失敗した人たちが、文字エンコーディングとして Shift_JISX0213 や Shift_JIS-2004 を指定すると読める、というノウハウを公開しています。

しかしもし Windows 由来のデータを Shift_JIS X 0213 系の文字コードとして読んでしまうとバックスラッシュ 0x5c, たちさき 0xfa0xb1, はしごだか 0xfb0xfc がそれぞれ ¥ U+00A5, , に文字化けします。

自分のブログに、その文字コードを使うのはほぼ誤解であり、正しくは cp932 (ms932) であると書いた のですが、はっきりさせたくなりました。

実際に誤解ではなく Shift_JIS X 0213 系の文字コードを使うシステムはあるのでしょうか? ブラウザはほぼ対応していないです。

2010年の本『プログラマのための文字コード技術入門』(矢野啓介)では適した用途として

Shift_JIS-2004 は Shift_JIS の資産と互換性を保ちつつ JIS X 0213 に対応するのに適した符号化方式です。(…中略…)今後は、Shift_JIS というときにもっぱら Shift_JIS-2004 を用いるという手もあります。

と、可能性が示唆されている感じでした。

解決

Shift_JIS-2004はIANAのCharacter setsにも登録されていませんし、UNICODEのMAPPINGSにもありません。標準で使っているようなシステムはたぶん存在しないと思われます。

以下Shfit_JISとその亜種や拡張を標準で採用しているシステムと対応言語をまとめました。

  • Shift_JIS IANA登録あり UNICODEマッピング
    言語: Java(Shift_JIS), Python(shift_jis), PHP(SJIS), Ruby(Shift_JIS)
  • Shift_JISX0213
    言語: Python(shift_jisx0213)
  • Shift_JIS-2004
    言語: Python(shift_jis_2004)
  • Windows-31J IANA登録あり UNICODEマッピング
    システム: Windows
    言語: Java(windows-31j), .NET(shift_jis), Python(cp932), PHP(SJIS-win), Ruby(Windows-31J)
  • MacJapanese UNICODEマッピング
    システム: Mac OS 9以前
    言語: .NET(x-mac-japanese), PHP(SJIS-mac), Ruby(MacJapanese)
  • SJIS-DoCoMo
    システム: ドコモの携帯電話
    言語: PHP(SJIS-Mobile#DOCOMO), Ruby(SJIS-DoCoMo)
  • SJIS-KDDI
    システム: auの携帯電話
    言語: PHP(SJIS-Mobile#KDDI), Ruby(SJIS-KDDI)
  • SJIS-SoftBank
    システム: ソフトバンクの携帯電話
    言語: PHP(SJIS-Mobile#SOFTBANK), Ruby(SJIS-SoftBank)

各言語は下記リンク先を参考にしています。
Java, .NET,Python, PHP, Ruby

各携帯電話会社のSJIS拡張は絵文字用でしたが、Unicodeへの絵文字追加によってスマートフォンでは直接Unicode(UTF-8)でやり取りしているようです。

上のリストの「システム」はデフォルト設定でその文字コードになることがあるということです。わざわざ選択した場合、例えば、Mac OS X以降のテキストエディットで日本語(Mac)を選ぶとMacJapaneseになったりします。他にも、LinuxでもShift_JISをデフォルトロケールに設定することもできます。しかし、それらをわざわざ使う人はいないと思われます。


OS等では対応していなくても、文字コードをよく理解していないプログラマーが作ったシステムであれば、Shift_JIS-2004を使ってしまっている可能性はあります。たとえば、次のようなシナリオです。

  1. とあるデータ(名称などに漢字が含まれている)を分析するPythonのプログラムを作ることになった。
  2. 分析結果の表を「Excelで読み込めるようにシフトジスのCSVファイルでデータを出力してくれ」と依頼された。
  3. 文字コードを”shift_jis”に設定して出力するようにした。
  4. その後のテストで一部の文字がエラーになることがわかった。JISX2013で追加された文字だったので、より大きい領域を持つ”shift_jis-2004″に設定しなおした。

こうして、エラーも起きなかったのでそのままプログラムを納品してしまい、後ほど、Excelで見ると文字化けしている、違う文字になっているとクレームが入ることになるでしょう(日本語版のExcelはBOMが無いとWindows-31Jで解釈します)。「シフトジス」という言葉はShift_JISなのか、Windows-31Jなのか、はたまた、MacJapaneseなのかを理解していない人は多いので、誰かが作ったシステムから出力されたファイルであれば、その人にちゃんと確認しておいた方が良いかと思います。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *