我的文件既有 ASCII 文本又有二进制内容
当我将该文件解析为 UTF-8 编码类型时
ASCII 类型的部分是可读的,但二进制编码的部分不能读取..
并且整个长度是正确的。因此该文件的编码类型是 UTF-8。
但是如何通过 java 程序解析二进制编码的部分?
您可以尝试读取 1 个字节并决定: - 它是 ASCII 还是 UTF-8(如果大于 127,则可能是 UTF-8) - 如果是 ASCII,而不是添加到字符串和状态重置。
如果可能是 UTF-8:阅读第二部分:下一个字节。如果最后 2 个字节是 UTF-8,则添加到字符串和状态重置 如果不是可接受的 UTF-8 字符,则最后 2 个字节是二进制数据:添加到数据队列。
处理下一个字节直到文件结束。
在这种情况下,您将拥有所有可能的 ASCII 和所有可能的 UTF-8 字符以及剩余的数据。
当读取的字符在数据中时可能会出现这种情况,除非您拥有原始文件描述符,否则无法知道。类似于:在位置 1000 开始一个数据块,直到.... pos 2000。在位置 2000 开始直到 2500 ASCII 字符串等等。
我希望它有帮助
要看。
将文件读取为二进制文件,可能是 ByteBuffer,因此字节序列可能会被当作字符串读取。
或者,如果您可以制作格式的语法,那也是可行的:将字节级别的关键字与String.getBytes("UTF-8")
. 如果您真的想在语法解决方案中付出努力,请使用 StringTemplate 。