meh*_*hdi 33 java csv unicode utf-8 opencsv
我正在使用此代码通过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();
}
Run Code Online (Sandbox Code Playgroud)
当我打开生成的csv文件时,在Excel中,它包含"ứỶờịỆ".其他程序,如notepad.exe没有此问题,但我的所有用户都使用MS Excel.
用SuperCSV替换OpenCSV并不能解决这个问题.
当我手动将波斯字符键入csv文件时,我没有任何问题.
Ale*_*exR 109
我花了一些时间,但找到了解决问题的方法.
首先我打开记事本并写下以下一行:????,你好,?????? 然后我使用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();
Run Code Online (Sandbox Code Playgroud)
当我使用excel打开这个文件时,我看到了"gibrish".
然后我尝试读取2个文件的内容,并且(如预期的那样)看到记事本生成的文件包含3个字节的前缀:
239 EF
187 BB
191 BF
Run Code Online (Sandbox Code Playgroud)
所以,我修改了我的代码,首先打印此前缀,之后是文本:
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();
Run Code Online (Sandbox Code Playgroud)
它奏效了!我使用excel打开文件并按预期看到了文本.
底线:在写入内容之前写下这3个字节.此前缀表示内容为"带BOM的UTF-8 "(否则它只是"没有BOM的UTF-8").
不幸的是,CSV是一种非常特殊的格式,没有元数据,也没有真正的标准要求灵活的编码.只要您使用CSV,就无法可靠地使用ASCII之外的任何字符.
你的选择:
Excel 不UTF8
用于打开 CSV 文件。这是一个已知的问题。实际使用的编码取决于 Microsoft Windows 的区域设置。例如,使用德语 lcoale,Excel 将打开一个 CSV 文件,扩展名为CP1252
.
您可以创建一个包含一些波斯字符的 Excel 文件并将其另存为 CSV 文件。然后编写一个小的Java程序来读取这个文件并测试一些常见的编码。这就是我用来找出 CSV 文件中德语变音符号的正确编码的方式。
归档时间: |
|
查看次数: |
79377 次 |
最近记录: |