Windows 1252 コードページにあると思われる Java (元は Excel シートから) の文字列がいくつかあります。それらをJava独自のUnicode形式に変換してほしい。問題が発生した場合に備えて、ExcelファイルはJXLパッケージを使用して解析されました。
はっきりさせておきますが、明らかに、Excel ファイルから取得した文字列は、すでにある種の Unicode であるかのように見えます。
WorkbookSettings ws = new WorkbookSettings();
ws.setCharacterSet(someInteger);
Workbook workbook = Workbook.getWorkbook(new File(filename), ws);
Sheet s = workbook.getSheet(sheet);
row = s.getRow(4);
String contents = row[0].getContents();
これは、コンテンツに何か Unicode が含まれているように見える場所です。 åäö はマルチバイト文字ですが、ASCII は通常のシングルバイト文字です。これは間違いなく Latin1 ではありません。printLn を使用して「contents」文字列を出力し、hello.txt ファイルにリダイレクトすると、文字「ö」が 2 バイト (16 進数では C3 B6) で表されていることがわかります。(10 進数で 195 と 179。)
[編集]
以下に示すさまざまなコードページなどで提案を試み、Cp1252などから変換しようとしました。代わりに他の種類の意味不明なものが得られるため、何らかの変換がありました。参照として、端末や書体などに問題がないことを確認するために、ソースコードに手動でコード化された「ö」文字列を常に出力しました。手動で入力した「ö」は常に機能しました。
[編集]
コメントで提案されているように WorkBookSettings も試しましたが、JXL のコードを調べたところ、コードの解析によって characterSet が無視されるようです。解析コードは、XLS ファイルが想定されているエンコーディングを調べるだけだと思います。