|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,编码|初学|心得这是张孝祥先生的java失业培训视频教程内里的一道标题(有所变化):
编写上面的程序代码,剖析和察看程序的运转了局:
importjava.io.*;
publicclassTestCodeIO{
publicstaticvoidmain(String[]args)throwsException{
InputStreamReaderisr=newInputStreamReader(System.in,"iso8859-1");
BufferedReaderbr=newBufferedReader(isr);
StringstrLine=br.readLine();
br.close();
isr.close();
System.out.println(strLine);
}
}
运转程序后,输出“中国”两个字,输入了局为???ú
请依照上面两种办法修正上述程序,是输出的中文可以一般输入
1。修正程序中的语句
InputStreamReaderisr=newInputStreamReader(System.in,"iso8859-1");
2。不修正下面的语句,修正上面的语句
System.out.println(strLine);
第一种该法很复杂,只需改成上面如许就能够了,这里不具体会商
InputStreamReaderisr=newInputStreamReader(System.in,"gb2312");
这里我要具体会商的是第二种该法怎样改
后来我是如许改的
System.out.println(newString(strLine.getBytes(),"iso8859-1"));
输出“中国”后输入的了局固然不是下面所述的乱码,可是仍是乱码,明显这类该法是不准确的!
这里我要感激软件平易近工告知我的准确改法,使我名顿开
System.out.println(newString(strLine.getBytes("iso8859-1")));
这两种改法事实有甚么区分呢?为了便利人人浏览,我先把准确和毛病的改法帖出来:
importjava.io.*;
publicclassTestCodeIO{
publicstaticvoidmain(String[]args)throwsException{
InputStreamReaderisr=newInputStreamReader(System.in,"iso8859-1");
//CreateanInputStreamReaderthatusesthegivencharsetdecoder
BufferedReaderbr=newBufferedReader(isr);
StringstrLine=br.readLine();
br.close();
isr.close();
System.out.println(strLine);
System.out.println(newString(strLine.getBytes(),"iso8859-1"));//毛病改法
//EncodesthisString(strLine)intoasequenceofbytesusingtheplatforms
//defaultcharset(gb2312)thenconstructsanewStringbydecodingthe
//specifiedarrayofbytesusingthespecifiedcharset(iso8859-1)
//becausethisString(strLine)usesthecharsetdecoder"iso8859-1",soitcan
//onlybeencodedby"iso8859-1",canntbeencodedbytheplatformsdefault
//charset"gb2312",sothislineiswrong.
System.out.println(newString(strLine.getBytes("iso8859-1")));//准确改法
//EncodesthisString(strLine)intoasequenceofbytesusingthenamed
//charset(iso8859-1),thenconstructsanewStringbydecodingthe
//specifiedarrayofbytesusingtheplatformsdefaultcharset(gb2312).
//Thislineisright.
}
}
下面的英文正文已说得很分明了,这里我仍是注释一下吧:
起首是毛病的改法System.out.println(newString(strLine.getBytes(),"iso8859-1"));
这句代码是将strLine中的字符串用体系默许的编码体例(这里是gb2312)
转换为字节序列,然后用指定的编码体例(这里是iso8859-1)机关一个新的
String对象,并打印到屏幕上。
毛病在那里呢?
请注重这一段代码
InputStreamReaderisr=newInputStreamReader(System.in,"iso8859-1");
BufferedReaderbr=newBufferedReader(isr);
StringstrLine=br.readLine();
这里strLine存储的内容是用指定的编码体例(iso8859-1)存储的,而转换成字节码
的时分(这句代码strLine.getBytes())却利用了体系默许的gb2312编码,以是固然就
输入乱码了!然后用gb2312编码的字节序列构建新的String对象的时分又利用了
iso8859-1编码,以是输入的乱码和System.out.println(strLine)有所分歧。
至于准确的改法就不必具体申明了吧,起首将strLine用iso8859-1编码体例转换成字节
序列,然后用体系默许的编码体例(gb2312)构建新的String对象,然后打印输入。
最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。 |
|