Java:从utf-8文件中读取字节

时间:2013-06-20 18:32:12

标签: java file unicode encoding utf

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

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

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

如何正确阅读内容?使用哪种API?

3 个答案:

答案 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个字节。