2008年7月7日月曜日

【Java】文字化け

JavaでDB2から取得したレコードをファイル出力した場合に、

文字化けが発生。要はSJISからMS932に落とす時に、

以下の文字は注意が必要ということでメモ

文字 SJIS MS932
u301C uFF5E
u2016 u2225
u2212 uFF0D
u00A2 uFFE0
u00A3 uFFE1
u00AC uFFE2

上記の文字のうち、「~」と「-」は日本語ではよく使うので

変換は必須。

でも、たったこの二つのために全文字列を走査して

変換するのはあまりにも割りにあわないと思う。

できればはなから入力させないようにするのが

得策かもしれません。

但し、SJISで出力するなら問題ないが、この場合は

機種依存文字の①とかが化けてしまう。悩ましい。

とはいってもすでに入力されてる場合は

どうしようもないので、変換する為のメソッドをば。

public static String sjis2ms932(String s) {
int len = s.length();
StringBuffer buf = new StringBuffer(len);
for (int i=0; i<len; i++) {
char c = s.charAt(i);
switch (c) {
case 'u301C': c = 'uFF5E'; break;
case 'u2016': c = 'u2225'; break;
case 'u2212': c = 'uFF0D'; break;
case 'u00A2': c = 'uFFE0'; break;
case 'u00A3': c = 'uFFE1'; break;
case 'u00AC': c = 'uFFE2'; break;
}
buf.append(c);
}
return buf.toString();
}

0 件のコメント: