1

我将一个文件读入一个字节数组。然后我使用 ICU4J 来检测文件的编码(我不知道编码可能是什么,这些文件可以有多种不同的编码)并返回一个 Unicode 字符串。像这样:

byte[] fileContent = // read file into byte array
CharsetDetector cd = new CharsetDetector();
cd.setText(fileContent);
CharsetMatch cm = cd.detect();
String result = cm.getString();

当我的文件使用 UTF-16LE 编码时,“结果”中的第一个字符是字节顺序标记。我对此不感兴趣,因为它特定于编码方案,而不是文件内容的一部分,我希望它会消失。

然而 ICU4J 将其归还。为什么会发生这种情况,有没有办法解决这个问题?我看到的唯一解决方案是手动检查返回的字符串中的第一个字符是否是字节顺序标记并手动剥离它。有没有更清洁/更好的方法?

4

1 回答 1

3

我刚刚查阅了文档... icu-project.org/apiref/icu4j/com/ibm/icu/text/...。他们实际上说它返回相应的 Java 字符串,但他们没有说任何关于删除 BOM 的内容。因此,如果它首先出现,我希望它会在那里。

对我来说,它也被检索是很自然的。如果他们正在修剪 BOM,我希望他们在文档中明确提及它。

我认为答案在这里 unicode.org/faq/utf_bom.html#bom1 -“在某些更高级别的协议下,在该协议中定义的 Unicode 数据流中可能强制(或禁止)使用 BOM。”

我想就差不多了。如果 BOM 是强制性的,则必须再次添加它。如果 BOM 被禁止,则将其过滤掉被认为是容易的部分:)

于 2013-01-28T14:27:46.790 回答