0

我有一个包含 UTF-8 数据的文件。该文件没有任何 BOM(字节顺序标记)或任何长度/大小信息作为每个 unicode 字/行的前缀。

我想从给定的偏移量和长度读取字节(是的字节!)。如果 API 具有查找、读取字节或从偏移量读取字节等功能,那将非常有帮助。

示例内容 - “100° 信息”,此内容长度为 9,如果我请求读取 9 个字节,它应该读取所​​有内容。目前它只读取 8。看起来 API 将 Unicode 字符视为 2 个字符。

如何正确阅读内容?哪个 API 用于相同的用途?

4

3 回答 3

2

但是,当编码为 UTF-8 时,度数的 Unicode 字符实际上是两个字节。度数符号由字节表示c2 b0RandomAccessFile如果你真的想读取文件中特定偏移量的字节,你可以在 Java 中使用,但我怀疑这就是你真正想要的。

可能最简单的方法是使用 aFileReader并读入大小为 9 的 char 数组,或者仅将 9 个字符读入更大的 char 数组。例如:

try (Reader reader = new InputStreamReader(new FileInputStream(filename), "UTF-8")) {
    char[] buffer = new char[1024];
    reader.read(buffer, 0, 9);
}
于 2013-06-20T18:38:33.507 回答
0

我有一种感觉,你混淆了字符和字节。该文本100° Info有九个字符,但由于度数符号被存储为两个字节,这将是十个字节。如果您读取九个字节,您会错过ofrom Info,但这仍然会解析为字符串,因为它是单字节字符。

于 2013-06-20T18:39:54.210 回答
0

您当然可以将内容读入字符串,然后使用 String.getBytes("UTF8") 获取给定字符串的字节。这将在您概述的情况下返回所有 9 个字节。

于 2013-06-20T18:43:15.120 回答