Java 以未知编码读取文本行
我需要逐行读取一个文本文件,然后依次向每个文件应用几个字符集解码器。实际上,我首先尝试将该行解码为UTF8编码的行,如果UTF8 CharsetDecoder引发格式错误的InputException,则返回到一字节字符集 但是,如果我将InputStreamReader与默认或指定的字符集一起使用,readLine函数会将其认为对指定的字符集无效的所有字节以“?”悄悄替换 最后,我编写了自己的函数来读取行,从一个字节一个字节地读取流,寻找行终止符并构造行。但这样看来,它的速度非常慢 有没有办法让Java在不接触字节的情况下读取行 更新: 我发现有些字符集中所有256字节都是有效的,其中两个是行终止符。 因此,可以逐行读取原始字节流Java 以未知编码读取文本行,java,character-encoding,decoding,Java,Character Encoding,Decoding,我需要逐行读取一个文本文件,然后依次向每个文件应用几个字符集解码器。实际上,我首先尝试将该行解码为UTF8编码的行,如果UTF8 CharsetDecoder引发格式错误的InputException,则返回到一字节字符集 但是,如果我将InputStreamReader与默认或指定的字符集一起使用,readLine函数会将其认为对指定的字符集无效的所有字节以“?”悄悄替换 最后,我编写了自己的函数来读取行,从一个字节一个字节地读取流,寻找行终止符并构造行。但这样看来,它的速度非常慢 有没有办法
。
此类字符集的示例如下:
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
windows-1256
问题现在已经解决。您不能使用reader类而不希望它解码底层字节流。如果您有一个文件,其中每一行都用不同的字符集(?)编码,那么您最好设计一种检测底层字符编码的方法。也许您可以使用编码检测器,例如。“看起来非常慢”-您的意思是“看起来会…”还是“我测量了它,它是…”?这个问题与这个问题是重复的:我认为可以公平地假设,逐字节读取流以确定编码比使用InputStreamReader读取流要慢得多。事实并非如此。我不会问如何确定字符集编码,因为我有办法做到这一点。我需要一种在不弄乱字节的情况下读取行的方法。@软件Monkey我运行readLine版本和逐字节运行,我感觉第二种速度明显较慢。如果存在一种单字节编码,InputStreamReader认为所有字节都是有效的,因此不会将其替换为“?”,我可以将它用于我的目的。我不能使用外部库,只能使用核心java.*类。幸运的是,这样的字符集是存在的!我会更新这个问题。这里是否可以将问题标记为已结束?