簡體   English   中英

讀取未知編碼的文本行

[英]Reading lines of text in unknown encoding

我需要逐行讀取文本文件,並按順序對每個文件應用幾個 CharsetDecoders。 實際上,我首先嘗試將行解碼為 UTF8 編碼的行,如果 UTF8 CharsetDecoder 引發 MalformedInputException,則回退到單字節字符集。

但是,如果我使用帶有默認或指定字符集的 InputStreamReader,readLine function 會默默地替換為“?” 它認為對指定字符集無效的所有字節。

我終於寫了自己的 function 來讀取行,從 stream 逐字節讀取,尋找行終止符並構造行。 但是這種方式看起來非常慢。

有沒有辦法讓 Java 在不接觸字節的情況下讀取行?

更新:我發現有所有 256 個字節都有效的字符集,其中兩個是行終止符。 因此可以line by line讀取原始字節 stream 。 此類字符集的示例是:

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

問題現已結束。

您不能使用閱讀器 class 並且不期望它解碼底層字節 stream。 如果您有一個文件,其中每一行都以不同的字符集(?)編碼,那么您最好使用 devise 一種檢測底層字符編碼的方法。 也許您可以使用諸如juniversalchardet 之類的編碼檢測器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM