java - 无法在 Excel 中使用 UTF8/UTF16 编码写入多字节字符

标签 java character-encoding

我一直在尝试使用

将简体中文字符写入 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/

相关文章:

php - 使用 CakePHP 的 UTF-8 MySQL 表中的 Windows 1252 数据

java - 在java中解码加密的字符串

utf-8 - 什么字符编码最适合跨国公司

java - 使用 java 编写使用 ssl/tls 的客户端-服务器应用程序,但不能使用 keytool

java - 读取同一目录中的 XML 文件

java - 如何使用 Achartengine 库在 Android 中使用 fragment 内的图表?

php - UTF-8 和 PHP,mbstring.func_overload 不起作用

java - 避免运行生成超长命令行的 java 测试时出现错误?

java - "build"现在我已经实现了多态性,应该怎么办? (Java,模拟游戏)

javascript - 将 html 附加到 dom 不尊重字符集