【改訂版】文字コードの変換

以前「文字コードの変換」を書き、その中で「この方法では解決できない文字化けがある」といいましたが、勘違いだったようです。

今回私が起こしていた文字化けは、文字コード「UTF-8」として表示したいところが、文字コード「ISO-8859-1」になってしまうというものでした。

この文字化けに対し、最初に私が行っていた処理は以下の通りです。

try{
String str = "文字化けした文字";

byte byte1[] = str.getBytes("UTF-8");
String newStr = new String(byte1, "UTF-8");

} catch (UnsupportedEncodingException e) {
 e.printStackTrace();
}

これは文字化けした文字をUTF-8のbyte配列に変換し、それを再びUTF-8の文字にするという処理です。

これでは、既に文字化けしているものの配列を取得しているだけなので、意味はありません。

今回の場合の文字化けは、本来UTF-8として認識されるなければならないbyte配列が、誤ってISO-8859-1のbyte配列として認識されていることで起こっているものでした。

つまりやらなければいけない処理としては、文字化けした文字を、ISO-8859-1として認識される前のbyte配列へと戻し、それを今度はUTF-8として認識してあげる処理です。

それをプログラムにすると、以下の通りになります。

try{
String str = "文字化けした文字";

byte byte1[] = str.getBytes("iso-8859-1");
String newStr = new String(byte1, "UTF-8");


} catch (UnsupportedEncodingException e) {
 e.printStackTrace();
}

これで文字化けは直ります。

多分冷静に考えれば簡単なことなのでしょうが、プログラミング経験の浅い私は、気づくのにかなり時間がかかりました。