首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在将字节数组读入字符串时,ICU4J会返回字节顺序标记?

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

Stack Overflow用户
提问于 2013-01-28 21:43:08
回答 1查看 509关注 0票数 1

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

代码语言:javascript
复制
byte[] fileContent = // read file into byte array
CharsetDetector cd = new CharsetDetector();
cd.setText(fileContent);
CharsetMatch cm = cd.detect();
String result = cm.getString();

当我的文件使用UTF-16LE编码时,"result“中的第一个字符是byte-order-mark。我对此不感兴趣,因为它是特定于编码方案的,而不是文件内容的一部分,所以我希望它会消失。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-28 22:27:47

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

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

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

我想差不多就是这样了。如果BOM是必填项,则必须重新添加。如果BOM被禁止,过滤掉它被认为是很容易的部分,我猜:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14563359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档