我的 Excel 版本在中文方面有问题,所以我决定改用俄罗斯人。西里尔字母在 Unicode 中已经足够深入,如果你能让它工作,你应该能够让中文工作。
您的代码很接近,但有两点错误:
UTF-16 可以是大端或小端。Java 字符集名称“UTF-16”实际上意味着具有大端编码的 UTF-16。Microsoft 始终使用 little-endian 作为默认值。您需要使用字符集“UTF-16LE”
您需要通过在文件开头放置一个字节顺序标记 (BOM)来警告 Excel 您正在使用此编码。它只是两个字节 0xFF 后跟 0xFE。
这是一个简单的程序,它用俄语打印“战争与和平”,每个单词都在一个单独的列中。生成的文件可以导入 Excel。只需将俄语文本替换为您的中文文本即可。
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
public class Russian
{
public static void main(String [] args) throws Exception
{
byte [] bom = { (byte) 0xFF, (byte) 0xFE};
String text = "ВОЙНА,И,МИР";
FileOutputStream fout = new FileOutputStream("WarAndPeace.csv");
fout.write(bom);
OutputStreamWriter out = new OutputStreamWriter(fout, "UTF-16LE");
out.write(text);
out.close();;
}
}