2012年5月7日月曜日

[Java]UTF-8からEUC-JP、Shift_JISに出力する際、文字化けを防ぐ方法

Javaで文字コードが「UTF-8」である文書データを「EUC-JP」「Shift_JIS」に
変換すると何文字か文字化けが発生する。

本来は、Javaだと自動でそれらの文字コードに変換してくれるのだが、
何個か変換できない。
もし「UTF-8」から「EUC-JP」、「Shift_JIS」に変換する場合は、
以下のサイトを参考に変換を行なってほしい。

■日本ベンダ協議会 (JVC) iconv コンバータ
http://docs.hp.com/ja/5187-0702/ch09s05.html

「表 9-7 EUC/Unicode 文字のマッピング変換」を見てほしい。
一番右がUTF-8での1文字を表している。

0x00A5 ----- 0x005C         0x005C

左の2つに一致していれば正常にEUC-JPに変換できるため、
これは、OK。

0x2014       0x2014  -----  0x2015

一番右と左の2つを比較すると違うため、これは自動で変換できない。

これを参考に「UTF-8」から「EUC-JP」に変換するメソッドを作成してみた。
多分この方法しかないと思う。
一文字ずつcharとして見ていき、UTF-8で変換できない文字を
無理矢理EUC-JP用に変換するメソッド。

public static String UnicodeToEuc(String str) {      StringBuffer result = new StringBuffer();      char c;      for (int i = 0; i < str.length(); i++) {          c = str.charAt(i);          switch (c) {          case 0x2015:              c = 0x2014;              break;          case 0x2225:              c = 0x2016;              break;          case 0xff0d:              c = 0x2212;              break;          case 0xffe0:              c = 0x00a2;              break;          case 0xffe1:              c = 0x00a3;              break;          case 0xffe2:              c = 0x00ac;              break;          case 0xffe4:              c = 0x00a6;              break;          }          result.append(c);      }      return result.toString();  }

変換後出力データを見ると、微妙に形が違うが、これしか方法がないため仕方ないね。
「Shift_JIS」に変換する時も同様に表を見ながらメソッドを完成させてほしい。

0 件のコメント:

コメントを投稿