我需要逐行读取文本文件,并按顺序向每个文本文件应用几个CharsetDecoders。实际上,我首先尝试解码line,好像它是UTF8编码的,如果UTF8 CharsetDecoder引发MalformedInputException,则回退到单字节字符集。
但是,如果我使用带有默认或指定字符集的InputStreamReader,则readLine函数将以“?”静默替换它认为对于指定的字符集无效的所有字节。
我最终编写了自己的读取行的函数,它逐字节地从流中读取,寻找行终止符并构造行。但这样看起来非常慢。
有没有办法让Java在不触及字节的情况下读取行?
更新:
我发现有一些字符集,其中所有256个字节都有效,其中两个是行终止符。
因此可以读取原始字节流line by line
。
这种字符集的例子是:
IBM00858 IBM437 IBM775 IBM850 IBM852 IBM855 IBM860 IBM861 IBM862 IBM863 IBM865 IBM866 ISO-8859-1 ISO-8859-13 ISO-8859-15 ISO-8859-2 ISO-8859-4 ISO-8859-5 ISO-8859-9 KOI8-R KOI8-U 窗口-1256
问题现已结束。
答案 0 :(得分:0)
您不能使用reader类,也不希望它解码基础字节流。如果你有一个文件,其中每一行都在不同的字符集(?)中编码,那么你最好设计一种检测基础字符编码的方法。也许您可以使用编码检测器,例如juniversalchardet。