質問: ISO2022⇒SJIS のコード変換ではまってます。 以下のISO2022のコード体系で表されたデータをSJISに変換したいのですが、 「1b6f 3b30 0f20 1b6f 3066 0f20 1b6f 3b33 0f20 2020 2000」 UNIXのコマンドのiconv で変換すると iconv -f ISO-2022-JP -t SJIS test.bin iconv: 変換エラーです。 変換エラーが検出されました。 となってしまいます。 ということは、ISO2022 と ISO-2022-JP は別のコード体系なのでしょうか? ISO2022の別コードへの変換するプログラムサンプルがありましたら、 おしえてください。お願いします。
回答: No1の方のとおり、ISO 2022は、国際的な文字集合を切り替えながら使用するための枠組みです。ISO-2022-JPはその枠組みの範囲内で日本の文字を効率的に扱うようにした非常に小さな部分集合といえます。 詳細はISOの文書を参照してほしいのですが、ESC oはG3にdesignateされている文字集合をGLに固定的にinvokeするという意味で、それ以降のコードがどの文字をあらわすかを規定します。SI(0x0f)はG0をGLにinvokeします。これらを使った表現はもちろんISO 2022には準じていますが、ISO-2022-JPでは使われないことになっています。よって、jconvやnkfをはじめとする世の中のコード変換ツールではまず対応できないでしょう。 G3にJIS X0208がdesignateされていて、G0にASCIIがdesignateされているとすると、ご質問の文字列は "三_井_山___" (_はスペース1個)となりそうです。しかし、この仮定がなりたつかどうかはわかりません。文脈しだいです。