如何将UTF-8字节块转换为字符?

5

我有一个大的UTF-8输入,被分成了1KB大小的块。我需要使用接受String类型的方法来处理它。类似于:

for (File file: inputs) {
     byte[] b = FileUtils.readFileToByteArray(file);
     String str = new String(b, "UTF-8");
     processor.process(str);
}

我的问题是我无法保证任何UTF-8字符不会在两个块之间拆分。运行我的代码的结果是一些行以“?”结尾,这破坏了我的输入。

解决这个问题的好方法是什么?


你的代码看起来正确。你确定输入没有损坏吗?也就是说,这些文件包含有效的“UTF-8”吗?另外一件事,如果你在Windows上运行,有时候UTF-8编码的文件在文件开头有一个魔术字节序列,那只是二进制数据,必须在传递给String构造函数时跳过它。 - Alexander Pogrebnyak
1个回答

3
如果我理解正确,您有一个使用UTF-8编码的大文本,然后将其分成1千字节的文件。现在您想要读取文本,但您担心编码字符可能会跨越文件边界而导致UTF-8解码错误。
API 有点陈旧,但是有一个SequenceInputStream可以从一系列子流创建看起来像单个InputStream的流。使用FileInputStream实例集合创建其中之一,然后创建一个InputStreamReader,将UTF-8字节流解码为应用程序文本。

1
SequenceInputStream 不适合我的需求(因为我不想在开始之前打开所有的文件),所以我实现了自己的 InputStream。谢谢。 - ModdyFire
好方法。希望这个示例能让你朝着正确的方向前进。 - erickson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接