2012-03-12 87 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包含正确的字符(您应该能够在调试器中检查该字符),但输出流无法写入该字符。