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の別コードへの変換するプログラムサンプルがありましたら、
おしえてください。お願いします。
No.1
- 回答日時:
詳しくはありませんが、ISO2022自体はコードセットではありません。
「文字セットを切り替える方法を定めた国際規格」ということのようです。
こちらをご覧下さい。
http://www.rfs.jp/sitebuilder/perl/08/01_02.html
http://www.kanzaki.com/docs/jcode.html
早速のご回答ありがとうございました。
教えていただいたURLを参考になんとか理解しつつあります。
ほんとうにありがとうございます。
No.2
- 回答日時:
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個)となりそうです。しかし、この仮定がなりたつかどうかはわかりません。文脈しだいです。
本当にご回答ありがとうございます。
仮定の方は、ずばりその通りでした。
ただ、私がISOの文書を参考にCでPGを作るには時間がかかりそうで、
少々焦ってます。
どこかにサンプルが落ちていないものでしょうか?
さらにご回答いただけると幸いです。
No.3ベストアンサー
- 回答日時:
ISO 2022全体はかなり複雑なので、たしかにこれを完全に解釈するような実装は時間がかかると思います。
サンプルとしては端末エミュレータのktermあたりがあるでしょうか。ktermのソースはどこにでもあると思います。文字コードにかかわる部分は、状態遷移表のVTPrsTbl.cと、その解釈実行するcharproc.cでしょうか。ESCが来たらESC用の表に切り替え、その状態でoが来たらLS3として解釈するというようなことをしています。ISO 2022にかかわらない端末制御がらみのシーケンスの解釈もしますので、これをそのまま持っていっても無意味だし、読むだけでも混乱のもとになるかもしれません。注意が必要です。
もっと現実的な路線としては、ISO 2022のうち何が入力されうるのか、しっかり見極めることでしょう。もし文字集合のdesignateがあらかじめ決まっていて固定され、LS3とSIしかこないのであれば、プログラムは劇的に簡単になります。ESC oが来たら以降2byteずつJISコードとして解釈し、SIが来たら以降はASCIIと解釈すればいいだけです。どれだけ簡略化できるかは入力の範囲しだいということです。
今、後者の方法しかないかなぁと悩んでいたとこでした。
ご回答の内容をみて少し気が楽になれました。
(かれこれ、12hはまっていたので。涙涙涙。)
入力に関する裏は、明日昼間確認してみたいと思います。
質問してほんとうによかったです。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 画像編集・動画編集・音楽編集 MP4動画をISOに変換 9 2023/06/12 18:20
- ソフトウェア ISOファイルの 管理 2 2022/06/06 13:22
- PHP phpの imap_search で漢字コード 1 2022/09/06 17:32
- フリーソフト フリーソフト[フリーオンライン動画兼音声変換ソフト]縦長になってしまう 2 2022/07/11 08:11
- 画像編集・動画編集・音楽編集 MP4の動画の再生を軽くしたい。 4 2023/03/14 15:33
- その他(OS) windows11非対応のインストール 3 2022/10/26 07:12
- 画像編集・動画編集・音楽編集 isoをmp4に変換するフリーソフトの照会について 1 2022/07/10 18:04
- 一眼レフカメラ 一眼レフカメラ 「露出補正」で変化するのは、絞り?シャッタースピード?ISO感度? 6 2023/01/15 19:33
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- デジタルカメラ 【緊急】BMPCC6kで撮影したbrawの素材をDaVinci Resolveに読み込んだのですが、 3 2022/11/17 04:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
「彡」って文字はなんという文...
-
std::stringからLPCWSTR型への変換
-
S-JIS → JIS コード変換するには
-
EBCDICへの変換
-
ふりがなをアルファベット化す...
-
JIS → S-JIS コード変換するには
-
英数字を含む文字列(0-9,A-Z)...
-
ExcelVBA実行後に時々落ちる
-
Symfowareでのデータ型変換につ...
-
10進数→2進数への変換
-
COBOLによる全角・半角混...
-
フォームのコントロールのバッ...
-
VS 2008(VB.NET)
-
%fと%gについて
-
COBOLのデータ型
-
ビット反転(Not)が機能しない
-
画像データ(png)をcsvファイル...
-
コード変換ライブラリについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
「彡」って文字はなんという文...
-
std::stringからLPCWSTR型への変換
-
VS 2008(VB.NET)
-
ExcelVBA実行後に時々落ちる
-
ふりがなをアルファベット化す...
-
Excelマクロにて30分単位の計算...
-
英数字を含む文字列(0-9,A-Z)...
-
Symfowareでのデータ型変換につ...
-
JIS → S-JIS コード変換するには
-
sedで日本語の置換方法について
-
COBOLによる全角・半角混...
-
フォームのコントロールのバッ...
-
数字5桁文字コード?
-
バイナリデータ→ASCII 変換プ...
-
2バイト文字をJEFからSJISに変...
-
CString ←→ BSTRの変換について
-
VBScript ASC関数:文字エンコ...
-
入力した文字を全て自動で全角...
おすすめ情報