【问题标题】:How to convert chunks of UTF-8 bytes to charcters?如何将大块 UTF-8 字节转换为字符?
【发布时间】:2016-01-18 00:13:14
【问题描述】:

我有一个大的 UTF-8 输入,它被分成 1-kB 大小的块。我需要使用接受字符串的方法来处理它。比如:

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

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

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

【问题讨论】:

  • 您的代码看起来正确。您确定输入没有损坏吗? IE。这些文件是否包含有效的“UTF-8”?另一件事,如果您在 Windows 上运行,有时 UTF-8 编码的文件在文件开头有一个神奇的字节序列,这只是二进制数据,在传递给 String 构造函数时必须跳过。跨度>

标签: java utf-8 character-encoding


【解决方案1】:

如果我理解正确,您有一个大文本,使用 UTF-8 编码,然后拆分为 1 KB 的文件。现在您想读回文本,但您担心编码字符可能会跨文件边界拆分,并导致 UTF-8 解码错误。

API 有点尘土飞扬,但有一个 SequenceInputStream 会从一系列子流中创建看似单个 InputStream 的内容。使用 FileInputStream 实例的集合创建其中一个,然后创建一个 InputStreamReader 将 UTF-8 字节流解码为应用程序的文本。

【讨论】:

  • SequenceInputStream 对我不利(因为我不想在开始之前打开所有文件)所以我实现了自己的 InputStream。谢谢。
  • 好方法。希望这个例子能让你朝着正确的方向前进。
猜你喜欢
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 2022-01-09
  • 2012-09-22
  • 2014-05-22
相关资源
最近更新 更多