我有一个包含 UTF-8 数据的文件。该文件没有任何 BOM(字节顺序标记)或任何长度/大小信息作为每个 unicode 字/行的前缀。
我想从给定的偏移量和长度读取字节(是的字节!)。如果 API 具有查找、读取字节或从偏移量读取字节等功能,那将非常有帮助。
示例内容 - “100° 信息”,此内容长度为 9,如果我请求读取 9 个字节,它应该读取所有内容。目前它只读取 8。看起来 API 将 Unicode 字符视为 2 个字符。
如何正确阅读内容?哪个 API 用于相同的用途?
但是,当编码为 UTF-8 时,度数的 Unicode 字符实际上是两个字节。度数符号由字节表示c2 b0
。RandomAccessFile
如果你真的想读取文件中特定偏移量的字节,你可以在 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);
}
我有一种感觉,你混淆了字符和字节。该文本100° Info
有九个字符,但由于度数符号被存储为两个字节,这将是十个字节。如果您读取九个字节,您会错过o
from Info
,但这仍然会解析为字符串,因为它是单字节字符。
您当然可以将内容读入字符串,然后使用 String.getBytes("UTF8") 获取给定字符串的字节。这将在您概述的情况下返回所有 9 个字节。