我一直在尝试使用
将简体中文字符写入 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 的问题吗?或者我可以在我的代码中纠正这个问题。
最佳答案
我的 Excel 版本在中文方面遇到问题,所以我决定选择俄语。西里尔字母已经足够深入 Unicode,如果你能让它工作,你应该也能让中文工作。
您的代码很接近,但有两处错误:
UTF-16 可以是大尾数法或小尾数法。 Java 字符集名称“UTF-16”实际上意味着采用大端编码的 UTF-16。 Microsoft 始终使用小端字节序作为默认值。您需要使用字符集“UTF-16LE”
您需要通过输入 byte order mark (BOM) 来警告 Excel 您正在使用此编码。在文件的开头。它只是两个字节 0xFF 后跟 0xFE。
这是一个简单的程序,用俄语打印“ war 与和平”,每个单词都在单独的列中。生成的文件可以导入到 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();;
}
}
关于java - 无法在 Excel 中使用 UTF8/UTF16 编码写入多字节字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13486382/