读取未知编码的文本行

时间:2011-07-06 04:11:25

标签: java character-encoding decoding

我需要逐行读取文本文件,并按顺序向每个文本文件应用几个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

问题现已结束。

1 个答案:

答案 0 :(得分:0)

您不能使用reader类,也不希望它解码基础字节流。如果你有一个文件,其中每一行都在不同的字符集(?)中编码,那么你最好设计一种检测基础字符编码的方法。也许您可以使用编码检测器,例如juniversalchardet