gpt4 book ai didi

java - 使用 UTF-16LE 编码和 Apache Commons IO 读写文本文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:00:12 28 4
gpt4 key购买 nike

我用 Java 编写了一个应用程序,并用 C# 复制了它。该应用程序读取和写入带有制表符分隔数据的文本文件,供 HMI 软件使用。 HMI 软件需要 UTF 或 ANSI 编码才能正确显示度数符号,否则我只使用 ASCII,这似乎工作正常。 C# 应用程序可以毫无问题地打开由其中任何一个保存的文件。 java 应用程序完美地读取了它保存的文件,但是在读取使用 C# 保存的文件时出现了一个小问题。当将文件中的第一个字符解析为 int 时,它会抛出 numberformatException。该字符始终为“1”。我已经用 editpadlight 打开了这两个文件,即使使用编码查看,它们看起来也是相同的,而且编码是 UTF-16LE。我正在为此绞尽脑汁,任何帮助将不胜感激。

lines = FileUtils.readLines(file, "UTF-16LE");

Integer.parseInt(line[0])

我看不出用 C# 保存的文件和用 Java 保存的文件有什么区别

Screen Shot of Data in EditPad Lite

        if(lines.get(0).split("\\t")[0].length() == 2){
lines.set(0, lines.get(0).substring(1));
}

最佳答案

您的 .NET 代码可能正在编写 BOM。兼容 Unicode 的阅读器会删除任何 BOM,因为它是元数据,而不是文本数据的一部分。

您的 Java 代码显式指定字节顺序

FileUtils.readLines(file, "UTF-16LE"); 

这有点像第 22 条军规;如果源有 BOM,那么您可以将其读取为“UTF-16”。如果不是,那么您可以将其读为“UTF-16LE”或“UTF-16BE”,因为您知道它是什么。

因此,要么使用 BOM 写入并在不指定字节顺序的情况下读取它,要么不使用 BOM 写入并指定字节顺序读取它。

使用 BOM:

[C#]

File.WriteAllLines(file, lines, Encoding.Unicode);

[Java]

FileUtils.readLines(file, "UTF-16"); 

没有 BOM:

[C#]

File.WriteAllLines(file, lines, new UnicodeEncoding(false));

[Java]

FileUtils.readLines(file, "UTF-16LE"); 

关于java - 使用 UTF-16LE 编码和 Apache Commons IO 读写文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53621075/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com