OpenCSV を介してcsvファイルにペルシャ語を追加するためにこのコードを使用しています。
String[] entries="\u0645 \u062E\u062F\u0627".split("#");
try{
CSVWriter writer=new CSVWriter(new OutputStreamWriter(new FileOutputStream("C:\\test.csv"), "UTF-8"));
writer.writeNext(entries);
writer.close();
}
catch(IOException ioe){
ioe.printStackTrace();
}
結果のcsvファイルをExcelで開くと、 "ứỶờịỆ"が含まれています。 notepad.exeなどの他のプログラムにはこの問題はありませんが、すべてのユーザーがMS Excelを使用しています。
OpenCSVを SuperCSV に置き換えても、この問題は解決しません。
ペルシャ語の文字を手動でcsvファイルに入力した場合、問題はありません。
残念ながら、CSVはメタデータがなく、柔軟なエンコードを要求する実際の標準がない非常にアドホックな形式です。 CSVを使用している限り、ASCII以外の文字を確実に使用することはできません。
あなたの選択肢:
しばらく時間を費やしましたが、問題の解決策を見つけました。
最初にメモ帳を開き、次の行を書きました:שלום、hello、привет次に、UTF-8を使用してファイルhe-en-ru.csvとして保存しました。その後、MS Excelで開きましたが、すべて正常に機能しました。
ここで、この行を次のようにファイルに出力する簡単なJavaプログラムを作成しました。
PrintWriter w = new PrintWriter(new OutputStreamWriter(os, "UTF-8"));
w.print(line);
w.flush();
w.close();
Excelを使用してこのファイルを開くと、「ギブリッシュ」が表示されました。
次に、2つのファイルの内容を読み取ろうとしましたが、(予想どおり)メモ帳で生成されたファイルに3バイトのプレフィックスが含まれていることがわかりました。
239 EF
187 BB
191 BF
そこで、最初にこのプレフィックスを、その後にテキストを印刷するようにコードを変更しました。
String line = "שלום, hello, привет";
OutputStream os = new FileOutputStream("c:/temp/j.csv");
os.write(239);
os.write(187);
os.write(191);
PrintWriter w = new PrintWriter(new OutputStreamWriter(os, "UTF-8"));
w.print(line);
w.flush();
w.close();
そしてうまくいきました! Excelを使用してファイルを開くと、期待どおりのテキストが表示されました。
結論:コンテンツを書き込む前にこれらの3バイトを書き込みます。このプレフィックスは、コンテンツが「UTF-8 with [〜#〜] bom [〜#〜] 」であることを示します(それ以外の場合は、「UTF-8 without BOM」です)。
ExcelはUTF8
を使用してCSVファイルを開きません。それは既知の問題です。実際に使用されるエンコーディングは、Microsoft Windowsのロケール設定によって異なります。たとえば、ドイツのlcoaleでは、ExcelはCP1252
でCSVファイルを開きます。
いくつかのペルシャ文字を含むExcelファイルを作成し、CSVファイルとして保存できます。次に、小さなJavaプログラムを作成して、このファイルを読み取り、いくつかの一般的なエンコードをテストします。