我正在尝试编写.txt文件,它必须是UCS-2 Little Endian,但是当我尝试时
writer = new PrintWriter(path, "UTF-16LE");
从我读到的内容应该是相同的,但它不适用于服务器上的特定应用程序。当我打开在Notepad ++中工作(手动创建)的文件时,它表示它是“UCS-2 Little Endian”,但当它用Java创建时,它表示“UCS-2 LE w / o BO”并且服务器无法读取它。 / p>
我怎么写它才能起作用?这是完整的代码:
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();
感谢您的任何建议。
答案 0 :(得分:9)
听起来您需要先编写byte-order mark,以便您的应用程序可以检测到编码。 (目前还不清楚“你说的”是什么意思 - 显然无论“它”是什么都可以猜到它是UTF-16LE,但不如你获得BOM时那么可靠。)
所以只需添加:
writer.write("\uFEFF");
在你写任何其他内容之前。
答案 1 :(得分:2)
我在Jython上遇到过这个问题。
在Jython 2.5.2上Jon Skeet的回答不起作用。你需要
write('\xff\xfe')
希望这有助于其他人。