public class test{
public static void main(String[] args)throws Exception{
String str=args[0];
str=new String(str.getBytes(),"utf8");//GBK -> utf8
String str2=new String(str.getBytes("utf8"),"GBK"); //utf8 ->gbk
System.out.println(str2); //出现乱码
}
}
C:\ww>java test 同
同C:\ww>java test 同学
同学C:\ww>java test 同学们
同学锟斤拷C:\ww>java test 同学们好
同学锟角猴拷C:\ww>java test 同学们好大
同学锟角好达拷
http://www.regexlab.com/zh/encoding.htm因此,我们常常使用 bytes = string.getBytes("iso-8859-1") 来进行逆向操作,得到原始的“字节串”。然后再使用正确的 ANSI 编码,比如 string = new String(bytes, "GB2312"),来得到正确的“UNICODE 字符串”。
String str2=new String(str.getBytes("gbk"),"GBK"); 这样是对的!
public static void main(String[] args)throws Exception{
String str=args[0];
str=new String(str.getBytes("GBK"),"utf8");
String str2=new String(str.getBytes("utf8"),"GBK");
System.out.println(str2);
}
}
换成这样就好啦,你的先得到相应的字节码,
String str2=new String(str.getBytes("gbk"),"GBK"); 这样是对的!
----------------------------------------------
1,平时看到大把的String str=new String(str.getBytes("utf8"),"GBK");这样的代码,是不是都是误人子弟?2,这样转,结果没错。但我怀疑编码根本没有转换。因为iso8859-1不能表示中文,不知我的理解对否?
String str="如果是中文的话";
str=new String(str.getBytes("gbk"),"iso8859-1");
String str2=new String(str.getBytes("iso8859-1"),"gbk");
3,这样转又出现乱码了,真是困惑?
String str="如果是中文的话";
str=new String(str.getBytes("iso8859-1"),"iso8859-1");
String str2=new String(str.getBytes("gbk"),"gbk");
这种写法完全是扯淡! 偶尔可能会正确,因为对于ascii字符他们的编码可能一样。String str="如果是中文的话";
str=new String(str.getBytes("gbk"),"iso8859-1");
String str2=new String(str.getBytes("iso8859-1"),"gbk");
这就更不知道在做什么了,
两条莫名其妙的语句,当然偶尔不出现乱码也是可能的。
就比如从10层楼跳下来也很可能一点事没有
rickhunterchen(千山鸟飞绝) ( ) 信誉:100 2006-04-26 11:28:00 得分: 0
建议去看看这片文章
http://www.regexlab.com/zh/encoding.htm因此,我们常常使用 bytes = string.getBytes("iso-8859-1") 来进行逆向操作,得到原始的“字节串”。然后再使用正确的 ANSI 编码,比如 string = new String(bytes, "GB2312"),来得到正确的“UNICODE 字符串”。
---------------------------------------------------------------------------
楼上说你这文章在扯淡,看来高手间的分歧还是很大的。
----------------------------------------------------------------------------------
对不起,我这里要更正一下:应该是String str=new String(str.getBytes("iso8859-1"),"GBK");//而非utf8.3,这样转又出现乱码了,真是困惑?
String str="如果是中文的话";
str=new String(str.getBytes("iso8859-1"),"iso8859-1");
String str2=new String(str.getBytes("gbk"),"gbk");
---------------------------------------------------------------
iso8859-1不能表示中文,所以不能这么转对不对?那平时,我们用get,post方式提交“中文内容”到服务器。在这个过程中,这些中文内容又采取什么编码格式?
我以前认为是iso8859-1,所以才有String str=new String(str.getBytes("iso8859-1"),"GBK");这样的转换。现在看来,这种理解值得商榷?
========================================================================================
看看这里:
http://www.blogjava.net/rickhunter/articles/33571.html
是把字符串使用iso8859-1编码转成字符串,如果str里面都是ascii码就不会丢失信息
如果含有中文就会丢失信息,导致无法恢复。
是把字符串使用iso8859-1编码转成字符串,如果str里面都是ascii码就不会丢失信息
如果含有中文就会丢失信息,导致无法恢复。
----------------------------------------------------------------------------
treeroot(旗鲁特) 老大,我想知道的是我们get,post中文信息到服务器,这些中文信息是什么编码?
是把字符串使用iso8859-1编码转成字节流因为在java中,字符串都是unicode的,都是双字节表示的。
String ss="中国";
byte[] bad=ss.getBytes("iso-8859-1");
byte[] good=ss.getBytes("GBK");
System.out.println(new String(bad,"iso-8859-1"));
System.out.println(new String(good,"GBK"));可以看出使用iso-8859-1丢失了数据,肯定无法得到原始的字符串了。
但是如果都是ascii码数据的话就不会丢失了。
---------------------------------------
你的意思是post,get中文信息时,中文被编码成一个个?号(这些?号算什么编码?)。那又如何还原为中文呢?(我很同意你的观点,但就是想不通这个问题)