首页 > 代码库 > java输入,输出的字符编码问题

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----锟斤拷锟?


本文出自 “厚积薄发” 博客,请务必保留此出处http://duanzhenyue.blog.51cto.com/9360091/1550134

java输入,输出的字符编码问题