- ベストアンサー
漢字コード変換のアルゴリズム…
下記URLのページ中に、 http://www.tohoho-web.com/wwwkanji.htm 「各コード間の変換アルゴリズム」 という項目があるのですが、 その下の、 「漢字コードマップ」を見ても、 JIS⇒S-JISの変換アルゴリズムがよくわかりません。 自分でももう一度考えて見ますが、 参考にあるようなサイト、 もしくは説明?してもらえると助かります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#3です。 まず、参考URLのHPを見てください。 これをみれば、同文字に対するコード比較ができます。 とりあえず、質問者様が指定されているHPのアルゴリズムを 忘れて、以下の事を考えて見てください。 (1){0x2120, 0x2130, 0x2220, 0x2230, 0x2420, 0x2430} (2){0x813F, 0x814F, 0x819E, 0x81AE, 0x829E, 0x82AE} 単純に上記の(抜粋ですが)テーブル(1)から(2)に変換する アルゴリズムを作成する場合どうしますか? 上位1バイトに着目して考えると、テーブル(1)の上位バイトが 2増加した時に、テーブル(2)の上位バイトが1増加していますよね。 c1 % 2の判断は、この処理と言えます。
その他の回答 (4)
- noboru2000
- ベストアンサー率33% (47/140)
シフトJISがなんでこうなのかというと、2バイトのコードのままというのは元のJISのエンコーディングと同じですが、1バイト目を 0x81~0x9f, 0xe0~0xfc の間の値になるように無理矢理詰め込もうとしたためにこうなったんです。(それで複雑な計算が必要になった) 1バイト目をこの値になるようにした理由は、それ以前のPCが JIS X 0201 (ASCIIの"\"記号を"¥"記号にしたものとカタカナ)を使っていたからで、それが 0x00~0x7f, 0xa0~0xdf を使っていて、これと漢字とを混在させたかったためだと思います。 ただこのコードは一部の会社だけで決めてしまったものなので、あまり評判はよくなかったように思います。(同じ文字に2つのコードが振られているとか、コードによって幅が変わるという仕様ではないのに事実上半角全角というものが存在するとか)。
- f_attck
- ベストアンサー率33% (40/118)
制御系の技術者です。 私には漢字どうこうは、良くわかりませんが、 アルゴリズムは理解できます。 まず、なにがわからないのでしょうか? 指摘されているHPを見ると表中緑の部分から赤い部分への ごく単純なコード変換に見えますが。 とりあえずは、 1.JISコード表とS-JISのコード表を見比べて見ましょう。 2.同じ漢字がどのコードになっているか見てみましょう。 3.その同じ漢字のJISコードをHP記載のアルゴリズムで 変換してみましょう。(手計算でできますよね) 4.同じ漢字のS-JISコードになっていませんか?
補足
一行目の、 if (c1 % 2) { ですが、 % 2で最下位のビットが1か判断してますよね? なんでそーゆう考え?になるのでしょうか?
- tekuteku123
- ベストアンサー率21% (5/23)
漢字コード変換などは、RFCに規定されていますので、 最終的にはRFCをみるのが一番だと思います。
- palmmy
- ベストアンサー率38% (841/2169)
変換アルゴリズムということであれば、 http://www.unixuser.org/~euske/doc/kanjicode/ が参考になるかと。
お礼
なるほど。 丁寧な回答ありがとうございます。