new String(str.getBytes("utf8"));这个方法调用你的系统的指定的语言。如果你系统用的默认字符集是gbk,则他相当于new String(str.getBytes("utf8"),"GBK");这个和系统类型没有关系,只是系统语言的设置有关系。
javac -encoding gbk xx.java 的问题,我个人看法是他编译时把你的常量字符串用gbk编码转为byte数组,然后写入class文件。什么都不加,则采用系统默认字符集进行转换。
javac -encoding gbk xx.java 的问题,我个人看法是他编译时把你的常量字符串用gbk编码转为byte数组,然后写入class文件。什么都不加,则采用系统默认字符集进行转换。
真正理解file.encoding的含义和它的作用范围,我可以保证你不会再问这样的问题。也不会再碰到编码和中文之类的问题。
new String(str.getBytes( "utf8 "));我用这个来处理我的字符串,可以正常(在linux下面),但是我指定了是new String(str.getBytes( "utf8 "),"GBK");或者是gb2312,又或者是ISO8859-1的话,则我处理的字符串为乱码(无论是在windows还是在linux下面)如果在linux下面编译,则需要加-encoding gb2312或者是GBK来编译java文件,才可以正常处理我的字符串啊。(也是同样的程序同样的处理)所以才有此一问。
这种程序拿到其他的平台上编译的,如果encoding不同会很容易出错。
因为字符串s的编码是你写源程序时的encoding,到不同的平台上之后javac会认为s的编码方式是当前平台的编码方式。
所以java的原文件里最好不要写这种多字节编码的字符串。
当我:
new String(str.getBytes("iso8859-1"),"iso8859-1");
的时候处理不正确而我:
new String(str.getBytes("iso8859-1"));
后面没有知道字符集的时候就可以正常处理我的字符串请问上面这两种处理有什么区别呢???