質問: 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なのかを理解していない人は多いので、誰かが作ったシステムから出力されたファイルであれば、その人にちゃんと確認しておいた方が良いかと思います。