gpt4 book ai didi

java - 在 java 和 csv 文件中设置 UTF-8

转载 作者:IT老高 更新时间:2023-10-28 21:01:47 25 4
gpt4 key购买 nike

我正在使用此代码通过 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();
}

当我在 Excel 中打开生成的 csv 文件时,它包含 "ứỶờịỆ"。 notepad.exe等其他程序没有这个问题,但是我所有的用户都在使用MS Excel。

将 OpenCSV 替换为 SuperCSV不能解决这个问题。

当我手动将波斯字符输入 csv 文件时,我没有任何问题。

最佳答案

我花了一些时间,但找到了解决您问题的方法。

首先我打开记事本并写下以下行:שלום, 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 打开这个文件时,我看到了“gibrish”。

然后我尝试读取 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 和 BOM '(否则它只是 'UTF-8 without BOM')。

关于java - 在 java 和 csv 文件中设置 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4192186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com