2

我一直在尝试使用将简体中文字符写入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的问题还是我可以在我的代码中纠正这个问题。

4

1 回答 1

2

我的 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();;
   }
}
于 2012-11-21T05:31:17.867 回答