記事のターゲット
- ほかの文字変換ではうまくいかなかった人
Unicodeとは
簡単に説明すると世界で使われる言語を統一して扱えるように番号を振ったものです。
基本的にこの番号を使うことで文字コードの変換を行うことができます。ただ、Javaのメソッドを使うだけの変換方法とは違い、変換したい文字のUnicodeをあらかじめ調べる必要があります。
なので、多くの文字変換をしたい場合は仕様から見直すのも視野に入れたほうが良いと思います。
変換方法
//変換したい文字列を指定
String uni = "コントラバス";
System.out.println("変換前:" + uni);
//1文字ずつ変換するので保持しておく変数を用意
StringBuffer sb = new StringBuffer();
for(int i = 0; i < uni.length(); i++) {
int code = uni.codePointAt(i);
switch(code) {
//トをセに変える
case 0x30C8:
code = 0x30BB;
break;
//ラをンに変える
case 0x30E9:
code = 0x30F3;
break;
//バをサに変える
case 0x30D0:
code = 0x30B5;
break;
}
sb.append(Character.toChars(code));
}
System.out.println("変換後:" + sb.toString());
実行結果
変換前:コントラバス
変換後:コンセンサス
使用コード | 説明 |
---|---|
int code = uni.codePointAt(i); | 取り出した文字のUnicodeを調べるメソッド |
sb.append(Character.toChars(code)); | Unicodeから1文字生成し、StringBufferに追加する |
途中の「0x~」の部分はUnicodeの番号を示しています。調べ方としてはいろいろあるのですが、私の場合は以下サイトで調べました。
サイトを開いたら一番大きい枠の中に調べたい文字を入れると、右側にいろいろ出てきます。
その中のUTF-16の部分にある30C8の部分をコピーしてきて文頭に0xを付けるとJavaで使える文字コードになります。
まとめ
今回の方法は結構最終手段的なやり方ですので多用はお勧めしません。
というのも、変換したい文に同じ文字が複数出てくると条件分岐がかなり面倒なので1文字だけの変換等でおすすめです。
加えて、これを使用するのは文字化けが起きた時だけでいいと思います。普通に変換したいだけならほかの方法がいっぱいあると思います。
文字コードを統一しているはずなのにハイフンだけおかしくなるといったときに私は使用しました。