質問: new hashmap(); static { contable.put(jistable[0],unicodetable[0]); contable.put(jistable[1],unicodetable[1]); contable.put(jistable[2],unicodetable[2]); contable.put(jistable[3],unicodetable[3]); contable.put(jistable[4],unicodetable[4]); contable.put(jistable[5],unicodetable[5]); contable.put(jistable[6],unicodetable[6]); contable.put(jistable[7],unicodetable[7]); } 3指定した文字列(例えば「aa09アイウ」)を1文字毎に処理を行い、hashmapのkeyに存在したらvalueの全角文字を返すということを やりたいのですが、英数字は問題なく変換できるのですが、半角のカナがうまく変換されません(hashmapのkey値とマッチしない) 16進数で確認しても期待した文字コードになりません。 jis8においての半角かなは何か特殊なのでしょうか? また、どうやればkey値とマッチするようにできるのでしょうか? ご教授いただければと思います。
回答: > //jis8のテーブル > static final int[] jistable = {0x61,0x41,0x31,0x39,0xffb1,0xffb2,0xffb3,0xffdd}; jis8の半角カナなら、8bitのはずですが、0xffb1 などと、16bitが混じってます。 どういうことでしょうか? (ついでに、unicodeのffb1、ffb2等は半角カナではありません) byteの配列としてjis8を取り込んだのなら、8bitしかないjis8の文字が 32bitの 0xffb1 と一致するはずがありません。 > 指定した文字列(例えば「aa09アイウ」)を1文字毎に処理を行い この文字列は、どのように取り込んだものでしょうか? その段階で、jis8ではなくなっているとかは、考えられませんか? 例えば、 ファイルからstringへ読み込んだ段階で、内部用のコードに変換がかかってるとか。 外部のjis8 →java内部にstringとして取り込み(unicodeに変換) → stringで半角カナから全角カナ変換 (例 http://www7a.biglobe.ne.jp/~java-master/samples/string/hankakukatakanatozenkakukatakana.html) とするのがいいように思います。