アプリ版:「スタンプのみでお礼する」機能のリリースについて

Java1年目の初心者です。

質問もどのように説明していいかわからなかったので、
至らないところもあるかと思いますが、どうぞ宜しくお願いします。

JIS8の半角カナ文字をUnicodeの全角文字へ変換するロジックを考えております。
やりたいことは以下になります。

①JIS8の変換元テーブル、Unicodeの変換後テーブルをint型の配列に定義します。

//JIS8のテーブル
static final int[] JISTABLE = {0x61,0x41,0x31,0x39,0xFFb1,0xFFb2,0xFFb3,0xFFdd};
//Unicodeのテーブル(以下の文字コードはUnicodeの全角コードではありません)
satic final int[] UNICODETABLE = {0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX,0xXX};

②HashMapのKeyに変換元テーブルの値、Valueに変換後テーブルの全角のコードを設定しています。
static Map<Integer,Integer> conTable = new HashMap<Integer,Integer>();
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]);
}

③指定した文字列(例えば「aA09アイウ」)を1文字毎に処理を行い、HashMapのKeyに存在したらValueの全角文字を返すということを
やりたいのですが、英数字は問題なく変換できるのですが、半角のカナがうまく変換されません(HashMapのKey値とマッチしない)
16進数で確認しても期待した文字コードになりません。

JIS8においての半角かなは何か特殊なのでしょうか?
また、どうやればKey値とマッチするようにできるのでしょうか?
ご教授いただければと思います。

A 回答 (2件)

> //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/ …

とするのがいいように思います。
    • good
    • 0

static final int[] JISTABLE = {0x61,0x41,0x31,0x39,0xb1,0xb2,0xb3,0xdd};


satic final int[] UNICODETABLE = {0x0061,0x0041,0x0031,0x0039,0x30a2,0x30a4,0x30a6,0x30f3};
ではダメですか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ちょっと自分の勘違いで、自己解決致しました。
今後も何かありましたらよろしくお願いします。

お礼日時:2017/07/10 23:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!