日期:2014-05-20  浏览次数:20754 次

字符集简单问题
##这段程序是想:先通过改变系统的默认字符集,由 "GBK "改成 "ISO-8859-1 "     所以输入的字符要先把由 "ISO-8859-1 "编码解码来的srt字符串

编码成字节数组;得到字节数组后,再由 "GBK "编码方法   解码成一个字符串strGBK,,我想输出的是这个strGBK   。
运行时输入:     中文+q
问题是:
这句(System.out.println(str);)是本不应能正确输出的,可输出的却是正确的。
而这句(String   strGBK=new   String(str.getBytes( "ISO-8859-1 "), "GBK ");)     是我认为能正确输出的,,去不能正确输出而显示 "? "
这是视频上的例子呀,可是怎么会出错呢???高手指点,,,,,(我用的是JCreator做的,不用有影响吧)
##
import   java.nio.charset.*;
import   java.util.*;
public   class   CharsetTest   {


public   static   void   main(String[]   args)   throws   Exception
{

Properties   p=System.getProperties();
p.put( "file.encoding ", "ISO-8859-1 ");
byte[]   buf=new   byte[100];
int   i=0;
int   data;
while((data=System.in.read())!= 'q ')  
{
buf[i]=(byte)data;
i++;

}
String   str=new   String(buf,0,i);
System.out.println(str);这句应是不正确的,可输出的是正确的。
String   strGBK=new   String(str.getBytes( "ISO-8859-1 "), "GBK ");   //这句应是正确输出的,可输出的是错的,是?
System.out.println(strGBK);

}
}

------解决方案--------------------
关注一下
------解决方案--------------------
控制台程序能测试出来吗?

java的编码首先要知道输入的什么编码,如果输入和输出的是同一种编码,而你的应用正好就支持这种编码,还要转换什么呢. 再把转成乱码吗?