java輸入,輸出的字符編碼問題

我們讀取文本(無論從那兒讀,鍵盤,硬盤)的時候:

儘量使用:

(從硬盤讀)InputStreamReader ir=new           InputStreamReader(fileInputStream,"編碼");

(從鍵盤讀)InputStreamReader ir=new InputStreamReader(System.in,"編碼");

可以指定編碼。

輸出文本時,

(輸出到硬盤)PrintStream ps=new PrintStream(fileInputstream,"編碼");

(輸出到顯示器)Sytem.out.(不用再指定編碼,系統用的是默認,輸出也用默認。)


我們讀文件(從硬盤)是這樣:從    二進制----字符。

我們輸出文件(向硬盤)是這樣:從    字符----二進制。


打印在屏幕上:  字符----(指定編碼)--二進制--(這個過程是控制檯的解碼)--字符(我們看到的)

內存從鍵盤讀入是這樣: 

    字符--(這個過程是系統的編碼)--二進制--(我們指定解碼)--字符(內存讀到的)

特殊之處,看下邊這個例子:

class ReadIn 

{

public static void main(String[] args) throws IOException 

{

BufferedReader bufr=new BufferedReader(

new InputStreamReader(System.in,"utf-8"));

BufferedWriter bufw=new BufferedWriter(

new OutputStreamWriter(System.out,"utf-8"));//

String line=null; 

while((line=bufr.readLine())!=null)

{

if("over".equals(line))

break;

bufw.write(line.toUpperCase());

bufw.newLine();

bufw.flush();

}

bufr.close();

}

}


程序運行結果 :

你好

???

錕斤拷錕?


解釋:你好  是我們輸入的。

在讀取的過程中,我們指定爲uft-8來解碼,

你好的gbk碼[-60,-29,-70,-61]  --按照utf-8 來解碼,---(沒找到符合utf-8規則的數據),就解成了???

解錯了的字符(就是上邊的???) --按照utf-8 來編碼---[-17,-65,-67,-17,-65,-67,-17,-65,-67]

[-17,-65,-67,-17,-65,-67,-17,-65,-67]--在終端,按照gbk----錕斤拷錕?


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章