Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是Java';s相当于Windows记事本;Unicode编码;?_Java_Excel_Unicode_Encoding_Notepad - Fatal编程技术网

什么是Java';s相当于Windows记事本;Unicode编码;?

什么是Java';s相当于Windows记事本;Unicode编码;?,java,excel,unicode,encoding,notepad,Java,Excel,Unicode,Encoding,Notepad,我需要使用Java将选项卡分隔的值导出为文本文件,并在Microsoft Excel中打开。当制表符分隔的值具有中文字符时,会出现问题 我尝试使用UTF-8导出文本文件,但Excel无法解释字符。然后我在记事本中打开导出的文本文件并将其保存为“Unicode”,它开始在Excel中显示正确的章程 那么,有人能告诉我什么是记事本“Unicode”在Java中的等价物吗 我的代码是: response.getOutputStream().write(reportHTML.getBytes("UTF

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

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

那么,有人能告诉我什么是记事本“Unicode”在Java中的等价物吗

我的代码是:

response.getOutputStream().write(reportHTML.getBytes("UTF-8"));
其中reportHTML具有选项卡分隔的值


是编码为Unicode的文本文件。

尝试将BOM添加到文件的第一个字节

在Windows环境中,当一种编码被称为“Unicode”时,它通常指的是。

这意味着
“UTF-16LE”
,每个java平台实现都支持它

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

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

在十六进制编辑器中查看文件,确定它是UTF-8、UTF-16还是UTF-32@jlordo你能建议一个十六进制编辑器和如何检查编码吗。我还链接了正确的文本文件,该文件在excelNotepad++中正常工作。Notepad++告诉我您的文件是UCS-2 Little-Endian格式的。在所有支持的编码中。@jlordo我在您提供的列表中没有看到UCS-2 Little Endian,因此这意味着我们无法使用java进行此操作?Excel应该能够处理UTF-8(可能需要BOM,但不这样认为),也许您的执行中有错误。您可以使用UTF-16,阅读以查看与UCS-2的区别。我尝试了UCS-2,它显示
java.io.UnsupportedEncodingException:UCS-2
,UTF-16没有给我所需的结果在记事本中,“Unicode”特别表示小尾端UTF-16,UTF-16LE。这是在UTF-16LE中生成的文件,这是它在excel中打开的快照,因此
àFF FE
,而是添加
OA 00
您可以手动添加吗?BOM的UTF-8表示是字节序列0xEF,0xBB,0xBFI,正如您所说,它工作并将文本文件导出为UTF-8,但随后它开始与制表符混淆,这是导出文件的链接这是在UTF-16LE中生成的文件,这是它如何在excel@Ankur中打开的快照。您给我的文本文件要么是UTF-32LE编码的,要么是双编码的UTF-16。仔细观察,它看起来像是双重编码的UTF-16,因为序列像
4E005300
。尝试一个简单的测试,比如将
“ääö”.getBytes(“UTF-16LE”)
写入一个文件,看看它是否有效。我尝试了你给我的代码,这是内容类型
“text/plain;charset=UTF-16LE”
@Ankur。在这种情况下,内容类型无关紧要,正如我所说,文件在utf16中被错误地双重编码。尝试一下我建议的简单测试,您会发现代码中的某个地方存在导致双重编码的错误。我尝试了“ääöö”.getBytes(“UTF-16LE”),但它不起作用。这是返回“ääöhajsgagdasfdjhDNJDSHFJHDJ”的代码andf这是文本文件