##这段程序是想:先通过改变系统的默认字符集,由"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);

}
}

解决方案 »

  1.   

    闭月羞花猫给了一篇文章,看一下可能有用
    http://www.regexlab.com/zh/encoding.htm
      

  2.   

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

  3.   

    先通过改变系统的默认字符集,由"GBK"改成"ISO-8859-1"  所以输入的字符要先把由"ISO-8859-1"编码解码来的srt字符串编码成字节数组;得到字节数组后,再由"GBK"编码方法 解码成一个字符串strGBK,,我想输出的是这个strGBK 。
      

  4.   

    http://www.7880.com/Info/Article-538316e0.html
    应该可以令你满意了