【问题标题】:What is Java's equivalent of Windows Notepad "Unicode Encoding"?Java 相当于 Windows 记事本的“Unicode 编码”是什么?
【发布时间】:2012-11-28 10:02:13
【问题描述】:

我有制表符分隔的值,我需要使用 Java 将其导出为文本文件,以便在 Microsoft Excel 中打开。当制表符分隔的值有中文字符时,就会出现问题。

我尝试使用 UTF-8 导出文本文件,但 Excel 无法解释字符。然后我在记事本中打开导出的文本文件并将其保存为“Unicode”,它开始在 Excel 中显示正确的章程。

那么有人可以告诉我 Java 中的记事本“Unicode”等价物是什么吗?

我的代码是:

response.getOutputStream().write(reportHTML.getBytes("UTF-8"));

reportHTML 有制表符分隔的值。

This是编码为Unicode的文本文件。

【问题讨论】:

  • 在十六进制编辑器中查看文件并确定它是 UTF-8、UTF-16 还是 UTF-32
  • @jlordo 你能推荐一个十六进制编辑器以及如何检查编码。我还链接了在 excel 中正常工作的正确文本文件
  • Notepad++ 告诉我您的文件在 UCS-2 Little Endian 中。 Here is a List 所有支持的编码。
  • @jlordo 我在您提供的列表中没有看到 UCS-2 Little Endian,所以这意味着我们不能使用 java 来执行此操作?
  • Excel 应该能够处理 UTF-8(可能需要 BOM,但不这么认为),也许您的实施有误。您可以使用 UTF-16,阅读 here 以查看与 UCS-2 的区别。

标签: java excel unicode encoding notepad


【解决方案1】:

意思是"UTF-16LE",每个java平台的实现都是required来支持的。

response.getOutputStream().write(reportHTML.getBytes("UTF-16LE"));

记事本 unicode 编码还会在文件开头插入 UTF-16LE BOM FF FE

【讨论】:

  • 这是在 UTF-16LE dl.dropbox.com/u/99923120/stackoverflow/… 中生成的文件,这是它在 excel dl.dropbox.com/u/99923120/stackoverflow/… 中打开方式的快照
  • @Ankur 你给我的文本文件要么用 UTF-32LE 编码,要么用双重编码的 UTF-16 编码。仔细观察,由于4E005300 之类的序列,它看起来像是双重编码的 UTF-16。尝试一个简单的测试,例如将"ääöö".getBytes("UTF-16LE") 写入文件,看看它是否有效
  • 我试过你给我的代码,这是内容类型"text/plain; charset=utf-16le"
  • @Ankur 在这种情况下内容类型无关紧要,正如我所说,文件在 utf16 中被错误地双重编码。尝试我建议的简单测试,您会发现代码中的某个错误会导致双重编码。
  • 我试过 "ääöö".getBytes("UTF-16LE") 但它不起作用。这是代码return "ääööhajsgagdasfdjhDNJDSHFJHDJ".getBytes("UTF-16LE");,这是文本文件dl.dropbox.com/u/99923120/stackoverflow/…
【解决方案2】:

尝试将 BOM 添加到文件的第一个字节。 http://en.wikipedia.org/wiki/Byte_order_mark

【讨论】:

  • 我尝试使用 stackoverflow.com/a/713255/662250 为 UTF-16LE 添加 BOM,但没有添加 FF FE,而是添加了 OA 00 00 00
  • 可以手动添加吗? BOM的UTF-8表示为字节序列0xEF,0xBB,0xBF
  • 我按照你说的做了,它工作并将文本文件导出为 UTF-8,但随后它开始与制表符混淆,这是导出文件的链接dl.dropbox.com/u/99923120/stackoverflow/…
【解决方案3】:

在 Windows 环境中,当编码称为“Unicode”时,它通常指的是UCS-2 or UTF-16

【讨论】:

  • 我试过 UCS-2,它说 java.io.UnsupportedEncodingException: UCS-2 和 UTF-16 并没有给我想要的结果
  • 在记事本中,“Unicode”特指little-endian UTF-16、UTF-16LE。
  • 这是在 UTF-16LE dl.dropbox.com/u/99923120/stackoverflow/… 中生成的文件,这是它在 excel dl.dropbox.com/u/99923120/stackoverflow/… 中打开方式的快照
  • 那么à 是你的问题吗?那么这根本不是编码问题!您的 CSV 包含 HTML/XML 字符引用,这些引用在 HTML/XML 之外不为人所知/无法理解!那是完全不同的话题!如果您在开始时更详细地描述了错误行为,我们本可以避免这种冗长的问题发现。
猜你喜欢
  • 2015-02-08
  • 2016-01-31
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 2014-07-22
相关资源
最近更新 更多