1

Java コードから CSV ファイルを作成しようとしています。

    File file = File.createTempFile("DummyReport", ".csv");
    SomeListofObjects items = getSomeList();
    FileUtils.write(file, "ID;CREATION;" + System.lineSeparator());
    FileUtils.writeLines(file, activities.getItems(), true);        
    return file;

特殊文字に関する問題に直面しています。

コードをデバッグすると、「ö」という文字があることがわかりました。しかし、生成された csv ファイルでは、妙に "ö" が来ています。

これを FileUtile または File で設定できますか? 誰かがこれを解決するのを手伝ってくれますか?

4

2 に答える 2

4

最初に、出力を正しく表示するテキスト ビューアを使用しているかどうかを確認します。そうでない場合は、システムのエンコーディングに問題がある可能性があります。

FileUtils.write(file, string)あなたのシステムでは8ビットのように見えるデフォルトのシステムエンコーディングを使用します。ただし、「ö」文字は 2 バイトとしてエンコードされるため、「ö」になります。

FileUtils.write(File file, CharSequence data, String encoding)代わりに、適切なエンコーディングで使用します。

  • ISO 8859-1 (8 ビット標準、Latin-1)
  • CP1252 (8 ビット独自、Windows デフォルト、Latin 1 を拡張)
  • MacRoman (8bit 専用、Apple デフォルト)
  • UTF-8 (16 ビット標準、Linux デフォルト)
  • Latin-15 (常にサポートされているわけではありません)

私の提案は、を使用することFileUtils.write(file, string, "UTF-8")です。

于 2014-05-21T12:34:09.550 に答える
1

ファイルに書き込むときにエンコーディングを指定しません。

その結果、デフォルトのエンコーディングが使用されます。

ただし、UTF-8 を使用しているようで、残念ながら Excel を使用しています。

また、ファイルの先頭に BOM を追加するまで、Excel は UTF-8 を読み取ることができません。これは他のプログラムでは必要ありません。

したがって、次の 2 つの選択肢があります。

  • あなたがやっていることを続けて、Excelで地獄に落ちてください。
  • ファイルの先頭に BOM を追加して、他のプログラムでファイルを読み取れないようにします。

また、Java 7 以降を使用している場合は、Files.write()代わりに使用してください。

もちろん、ISO をエンコーディングとして使用する別の解決策もありますが、それはあなたの選択です。

于 2014-05-21T12:57:09.680 に答える