gpt4 book ai didi

java - 读取未知编码的文本行

转载 作者:行者123 更新时间:2023-12-02 05:18:10 30 4
gpt4 key购买 nike

我需要逐行读取文本文件,并按顺序对每个文件应用多个 CharsetDecoder。实际上,我首先尝试将行解码为 UTF8 编码的行,如果 UTF8 CharsetDecoder 引发 MalformedInputException,则回退到单字节字符集。

但是,如果我使用具有默认或指定字符集的 InputStreamReader,readLine 函数会默默地替换为“?”它认为对于指定字符集无效的所有字节。

我最终编写了自己的读取行的函数,该函数逐字节地从流中读取,查找行终止符并构造行。但这样看起来速度非常慢。

有没有办法让Java读取行而不接触字节?

更新:我发现有些字符集所有 256 个字节都是有效的,其中两个是行终止符。因此可以逐行读取原始字节流。此类字符集的示例是:

IBM00858IBM437IBM775IBM850IBM852IBM855IBM860IBM861IBM862IBM863IBM865IBM866ISO-8859-1ISO-8859-13ISO-8859-15ISO-8859-2ISO-8859-4ISO-8859-5ISO-8859-9KOI8-RKOI8-Uwindows-1256

问题现已结束。

最佳答案

您不能使用读取器类而不期望它解码底层字节流。如果您有一个文件,其中每一行都使用不同的字符集(?)进行编码,那么您最好设计一种检测底层字符编码的方法。也许您可以使用编码检测器,例如 juniversalchardet .

关于java - 读取未知编码的文本行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6591450/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com