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(); } } }