InputStreamReader讀取文件出現亂碼


當你讀取一個文本文件時,如果是在電腦記事本上面寫的,然后保存。使用InputStreamReader讀取出來,並且是按照他的編碼格式讀取出來,發現還是存在亂碼,比如文本內容是“你好”,讀出來顯示是“?你好”。


使用資源管理器在項目的目錄下創建一個b.txt文件,在里面輸入“你好”,然后保存

1 InputStreamReader isr = new InputStreamReader(new FileInputStream(“src/txt/b.txt”)); 
2 char[] ch = new char[1024]; 
3 int index = isr.read(ch); 
4 System.out.println(new String(ch,0,index)); 
5 isr.close();

 

運行結果:?你好


這是因為你在文本編輯器寫入文本時,系統自動在前面加了一個開始標示符,在內容結束后面加了一個結束標示符,如果 System.out.println(new String(ch,1,index-1));來打印輸出的話,就把開始結束標示符去掉了,可以達到原內容輸出的效果,但不建議這么做,因為並不是所有的文件都是這樣。

1 InputStreamReader isr = new InputStreamReader(new FileInputStream("src/txt/b.txt"));    
2         char[] ch = new char[1024];
3         int index = isr.read(ch);
4         System.out.println(new String(ch,1,index-1));
5         isr.close();

 

 運行結果:你好

最好還是自己通過OutputStreamWriter自己寫一個文本文件,規定他的編碼格式,然后讀取出來。就不會出現上面描述的錯誤。詳細代碼如下:

 1 public static void main(String[] args) throws Exception {
 2         //標准的字節流,按照一定的編碼格式,轉換為字符流。如果讀取字符流的時候,使用的是系統默認的編碼格式,
 3         //則直接使用fileReader和fileWriter。如果需要指定編碼格式,則使用inputStreamReader和OutputStreamWrite
 4         OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("src/txt/b.txt"), "UTF-8");
 5         //可以再包裝一層,也可以不包裝這一層,直接使用osw調用方法往文本里面寫入內容
 6         BufferedWriter bw = new BufferedWriter(osw);
 7         bw.write("你好");
 8         bw.flush();//刷新緩沖內容到文件
 9         bw.close();
10         osw.close();
11         //創建一個inputstreamreader
12         InputStreamReader isr = new InputStreamReader(new FileInputStream("src/txt/b.txt"),"UTF-8");
13         char[] ch = new char[1024];
14         int index = isr.read(ch);
15         System.out.println(new String(ch,0,index));
16         isr.close();
17     }

 

 最后運行結果:你好


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM