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及以后就不行了