簡體   English   中英

讀取任何有奇怪編碼的文本文件?

[英]Reading any text file having strange encoding?

我有一個帶有奇怪編碼“UCS-2 Little Endian”的文本文件,我想用Java讀取它的內容。

使用NotePad ++打開文本文件

正如您在上面的屏幕截圖中看到的那樣,文件內容在Notepad ++中顯示正常,但是當我使用此代碼讀取它時,只是在控制台中打印垃圾:

String textFilePath = "c:\strange_file_encoding.txt"
BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream( filePath ), "UTF8" ) );
String line = "";

while ( ( line = reader.readLine() ) != null ) {
    System.out.println( line );  // Prints garbage characters 
}

重點是用戶選擇要讀取的文件,因此它可以是任何編碼,並且因為我無法檢測文件編碼,所以我使用“UTF8”對其進行解碼,但如上例所示,它無法正確讀取。

有沒有以正確的方式閱讀這些奇怪的文件? 或者至少可以檢測出我的代碼是否無法正確讀取它?

您在InputStreamReader構造函數中使用UTF-8作為編碼,因此它將嘗試將字節解釋為UTF-8而不是UCS-LE。 這是文檔: Charset

我想你需要根據它使用UTF-16LE。

以下是有關受支持的字符集及其Java名稱的更多信息: 支持的編碼

您在InputStreamReader提供了錯誤的編碼。 您是否嘗試過使用UTF-16LE而不是UTF8?

BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream( filePath ), "UTF-16LE" ) );

根據Charset說法:

UTF-16LE 16位UCS轉換格式,little-endian字節順序

您不能對所有文件使用UTF-8編碼,尤其是在您不知道期望哪種文件編碼的情況下。 在讀取文件之前使用可以檢測文件編碼的庫,例如: juniversalchardetjChardet

有關更多信息,請參閱Java:如何確定流的正確charset編碼

暫無
暫無

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

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