我有一个包含UTF-8数据的文件。此文件没有任何BOM(字节顺序标记),也没有任何长度/大小信息作为每个unicode字/行的前缀。
我想从给定的偏移量和长度读取字节(是字节!)。如果API具有搜索,读取字节或从偏移读取字节等功能,那将非常有用。
示例内容 - “100°Info”,对于此内容长度为9,如果我请求读取9个字节,则应该读取所有内容。目前它只读取8.看起来API将Unicode字符视为2个字符。
如何正确阅读内容?使用哪种API?
答案 0 :(得分:2)
但是,当编码为UTF-8时,度数的Unicode字符实际上是两个字节。度数符号由字节c2 b0
表示。如果你真的想在文件中的特定偏移处读取字节,你可以在Java中使用RandomAccessFile
,但我怀疑这是你真正想要的。
可能最简单的方法就是使用FileReader
来读取大小为9的char数组,或者只读取9个字符到更大的char数组中。例如:
try (Reader reader = new InputStreamReader(new FileInputStream(filename), "UTF-8")) {
char[] buffer = new char[1024];
reader.read(buffer, 0, 9);
}
答案 1 :(得分:0)
我感觉你混淆了字符和字节。文本100° Info
有九个字符,但由于度数符号存储为两个字节,因此它将是十个字节。如果您读取9个字节,那么您将错过o
中的Info
,但这仍然会解析为字符串,因为它是单字节字符。
答案 2 :(得分:0)
您当然可以将内容读入字符串,然后使用String.getBytes(“UTF8”)来获取给定字符串的字节。这将返回您概述的案例中的所有9个字节。