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

java字符编码问题....
public   class   CharCode
{
      public   static   void   main(String[]   args)throws   Exception
      {
            System.setProperty( "file.encoding ", "iso8859-1 ");     //(1)

            System.getProperties().list(System.out);

            String   strChina   =   "中国 ";
            for(int   i   =   0;i <strChina.length();i++)
            {
                  System.out.println(Integer.toHexString((int)strChina.charAt(i)));
            }

            byte[]   buf   =   strChina.getBytes();     //(2)
            for(int   i=0;i <buf.length;i++)
            {
                  System.out.println(Integer.toHexString(buf[i]));     //(3)
            }
           
            for(int   i=0;i <buf.length;i++)
            {
                  System.out.write(buf[i]);       //(4)
            }
            System.out.println();
      }
}


-----------------------------------
(1)确实已经把java虚拟机环境属性改为iso8859-1了..(3)和(4)却是以GBK的字符编码输出...

把(2)改为byte[]   buf   =   strChina.getBytes( "iso8859-1 ");   才按照iso8859-1的字符编码输出....

为什么(1)没起作用?

我是新人...没有分....请大家多多帮忙....

------解决方案--------------------
up,我跟你打印出来的一样

4e2d
56fd
ffffffd6
ffffffd0
ffffffb9
fffffffa
中国
------解决方案--------------------
sun.jnu.encoding=GBK才是他默认的编码方式吧...

------解决方案--------------------
我没有试,但是一眼看到一个小错误,iso-8859-1
------解决方案--------------------
是不是每个都需要改啊
------解决方案--------------------
照你门说的去改了..输出结果还是
4e2d
56fd
ffffffd6
ffffffd0
ffffffb9
fffffffa
中国

正确的输出结果应该是
4e2d
56fd
3f
3f
??
中国
------解决方案--------------------
上面的(2)、(3)、(4)都是按操作系统缺省编码解码的
操作系统缺省编码可以这样取得:
String DefaultOSencoding=System.getProperty( "file.encoding ");
但是改变file.encoding并不能改变操作系统缺省编码(控制面板==> ;区域设置 设置实现)的,
file.encoding是供jvm编译时用的,所以这里改变file.encoding基本上是无用的.

上面的整个流程是Source--> javac--> javaIO,其中Source--> javac与file.encoding有直接关系.
JavaIO与操作系统缺省编码有直接联系(人为指定编码、解码除外),另外就是java中的字符集是UNICODE.
------解决方案--------------------
好像在jdk1.4.2之前是可以的,1.4.2及以后就不行了