2012-03-12 86 views
0

當我試圖從文件讀取文本,底層的文本顯示不正確使用LineNumberReaderLineNumberReader支持UTF-8編碼

文本試圖從文件中讀取 -

¥ · £ · € · $ · ¢ · ₡ · ₢ · ₣ · ₤ · ₥ · ₦ · ₧ · ₨ · ₩ · ₪ · ₫ · ₭ · ₮ · ₯ · ₹ 

示例代碼 -

FileInputStream fis = null; 
    try { 
     fis = new FileInputStream("C:\\Users\\JavaUser4\\Desktop\\checkImort.txt"); 
     InputStreamReader streamReader = new InputStreamReader(fis, "UTF-8"); 
     LineNumberReader reader = new LineNumberReader(streamReader); 
     String sLine = reader.readLine(); 
     System.out.println(sLine); 
    } catch (Exception ex) { 
    } finally { 
     try { 
      fis.close(); 
     } catch (IOException ex) { 
     } 
    } 

輸出 -

? ? ? ? ? ? $ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 

請使用LineNumberReader正確地閱讀本文。我寧願留在LineNumberReader因爲我用RandomAccessFile,這是根據我的要求

  • 打開包含UTF-8編碼的文本文件的完美解決方案。
  • 設置行號,我們需要從中開始讀取文件。
  • 從文本文件中讀取25行。
  • 獲取偏移量的最後位置。
  • 退出。
  • 再次打開文件。
  • 設置行號從我們需要從相同文件開始讀取下25行的位置。
  • 從文本文件中讀取25行。
  • 獲取最後的偏移量。
  • 依此類推。

缺點是RandomAccessFile不支持UTF-8編碼和我搬到LineNumberReader,但同樣發生在這裏。請幫忙。

回答

0

你正在做正確的讀取(假設文件實際上是UTF-8編碼)。

問題在於輸出。

您正在寫入的輸出流可能被配置爲輸出爲ISO-8859-1或它的一個變體(我猜你是在Windows上運行它,因爲這是Windows上的常見問題)。

請注意,輸出「?」通常是由於某些字符無法在給定的編碼中表示。因此,您的String包含正確的字符(您應該能夠在調試器中檢查該字符),但輸出流無法寫入該字符。