繁体   English   中英

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

[英]Java: read bytes from a utf-8 file

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

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

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

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

但是,当编码为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);
}

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

您当然可以将内容读入字符串,然后使用String.getBytes(“UTF8”)来获取给定字符串的字节。 这将返回您概述的案例中的所有9个字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM