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