以前「文字コードの変換」を書き、その中で「この方法では解決できない文字化けがある」といいましたが、勘違いだったようです。
今回私が起こしていた文字化けは、文字コード「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(); }
これで文字化けは直ります。
多分冷静に考えれば簡単なことなのでしょうが、プログラミング経験の浅い私は、気づくのにかなり時間がかかりました。