ISO-8859-1 を UTF-8 に変換すると文字化けするとき

ISO/IEC 8859-1 – Wikipedia にあるとおり、ISO-8859-1 ではアキュート・アクセントを指定することができます。そういった文字を含むテキストを iconv を使って変換したところ、アキュート・アクセントがうまく変換できませんでした。いろいろ調べてもわからなかったので、Javaで変換することにして目処がたったのですが、ふと、もともとのテキストデータがWindows-1252を間違えてISO-8859-1と指定したデータだったのかもしれないなぁ、と思い直しました。ということで、iconvへWindows-1252を指定したら、変換できました。

問題は解決したのですが、Javaプログラムも途中まで作ったので紹介しておきます。

こんな感じでプログラムを用意しました。アキュート・アクセントが -62, -110 というバイト列になっていたので、それをここでは、とりあえず@@に直しています。前後の文字列が何かをみて変換するのが良いのですが、どうやるときれいに変換できるかは、ちょっと考えどころです。

public class Iso8859Trns {
 public static void main(String[] args) throws Exception {
  java.io.BufferedReader br = null;
  try {
   String fileName = args[0];
   java.io.InputStreamReader isr = new java.io.InputStreamReader(new java.io.FileInputStream(fileName),"ISO-8859-1");
   br = new java.io.BufferedReader(isr);
   String line = "";
   while (br.ready()) { 
    line = br.readLine();
    byte[] bs = line.getBytes();
    for (int i=0 ; i<bs.length ; i++) {
      byte b = bs[i];
      if (b == -62 || b == -110) {
       bs[i] = 64;
      }
    }
    String o = new String(bs);
    System.out.println(o);
   }
  } finally {
   br.close();
  }
 }
}
同じタグの記事: iconv
同じタグの記事: Java
同じタグの記事: Linux
同じカテゴリの記事: Program
関連書籍: Java