我一直在尝试使用
将简体中文字符写入excel文件OutputStreamWriter(OutputStream out, String charsetName).write(String str,int off,int len);
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file), "UTF-16");
osw.write((vt.get(index)).toString());
但不幸的是,这不起作用。它显示垃圾字符。有没有人对此有任何想法。
这是excel的问题还是我可以在我的代码中纠正这个问题。
答案 0 :(得分:2)
我的Excel版本遇到了中文问题所以我决定选择俄罗斯人。西里尔语远远超过了Unicode,如果你可以让它工作,你应该能够让中文工作。
你的代码很接近,但有两件事是错的:
UTF-16可以是big-endian或little endian。 Java字符集名称“UTF-16”实际上意味着UTF-16具有大端编码。 Microsoft始终使用little-endian作为默认值。你需要使用charset“UTF-16LE”
您需要通过在文件开头放置byte order mark (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();;
}
}