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