在Java中以UCS-2 Little Endian格式编写文本文件

3

我正在尝试编写一个 .txt 文件,并且它必须是 UCS-2 小端格式的,但是当我尝试时

writer = new PrintWriter(path, "UTF-16LE");

从我所了解的来看,它应该是一样的,但在服务器上的特定应用程序中无法正常工作。当我打开在Notepad ++中有效(手动创建)的文件时,它说它是“UCS-2 Little Endian”,但是当它像这样在Java中创建时,它说是“UCS-2 LE w/o BO”,并且服务器无法读取它。

我该如何编写代码才能使其正常工作?以下是完整的代码:

writer = new PrintWriter(path, "UTF-16LE");
for (int j = (i - itemsInPlaylist + 1); j <= i; j++) {
    writer.println(listParsedFile.get(j).getNameOfFile());
}
itemsInPlaylist = 0;
writer.close();

感谢任何建议。

2个回答

10
似乎您需要先写入字节顺序标记,以便应用程序可以检测编码。 (“它说什么”并不清楚-显然,“它”可以猜测它是UTF-16LE,但这种情况比您拥有BOM时不可靠。)
因此,只需添加:
writer.write("\uFEFF");

在你写任何其他东西之前。


非常感谢,这正是我想要的。 :) - Tunerx

2

我在使用Jython时遇到了完全相同的问题。

在Jython 2.5.2上,Jon Skeet的答案不起作用。你需要

write('\xff\xfe')

希望这能帮助其他人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接