gpt4 book ai didi

java - 为什么 ICU4J 在将字节数组读入字符串时返回字节顺序标记?

转载 作者:行者123 更新时间:2023-11-29 05:49:21 24 4
gpt4 key购买 nike

我将一个文件读入一个字节数组。然后我使用 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 返回它。为什么会发生这种情况,有什么办法可以解决这个问题吗?我看到的唯一解决方案是手动检查返回的字符串中的第一个字符是否是字节顺序标记并手动剥离它。有没有更清洁/更好的方法?

最佳答案

我刚刚查阅了文档 ... icu-project.org/apiref/icu4j/com/ibm/icu/text/...。他们实际上说它返回相应的 Java String 但他们没有说任何关于删除 BOM 的事情。因此,如果它一开始就存在,我希望它会存在。

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

I think the answer is here unicode.org/faq/utf_bom.html#bom1 - "Under some higher level protocols, use of a BOM may be mandatory (or prohibited) in the Unicode data stream defined in that protocol."

我想差不多就是这样了。如果 BOM 是强制性的,则您必须重新添加它。如果 BOM 被禁止,则将其过滤掉我认为是最简单的部分 :)

关于java - 为什么 ICU4J 在将字节数组读入字符串时返回字节顺序标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14563359/

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