程序中有汉字参数,经常会遇到编码转码问题,总结下:
1.汉字为多字节字符,须多字节编码解码,如"测试".getBytes("gb2312");
这样"测试".getBytes("gb2312")就变成一个byte数组,这时候你可以随意重新指定编码如iso-8859-1,
String s1=new String("测试".getBytes("gb2312"),"iso-8859-1");
编为s1,这是s1就变成一个是iso-8859-1编码的字符串,如果你想重新转为中文,那么,你用什么字符集编码的,必须用什么字符集来解
码,这里是iso-8859-1,可以这么来做
String s2 = new String(s1.getBytes("ISO-8859-1"),"gb2312");
这样s2又重新变回中文了,所以当你打印s2时,就是“测试”。
2.用iso-8859-1做中间编码,原因:
[1]iso-8859-1是单字节字符编码,
[2]ANSI 编码 (如:GB2312,
BIG5,Shift_JIS,ISO-8859-2等等),是多字节编码(英文单字节,中文多字节);
[3]UNICODE 编码(UTF-8, UTF-7, UTF-16, UnicodeLittle,
UnicodeBig....),是宽字节编码(所有字符均是多字节)
因此用iso-8859-1做中间码,会保持原有字节的秩序,不发生混乱;可以理解为其他的编码对iso-8859-1兼容吧。
因此,我们常常使用 bytes = string.getBytes("iso-8859-1")
坐中间码来进行逆向操作,得到原始的“字节串”。然后再使用正确的ANSI 编码,比如 string = new String(bytes,
"GB2312"),来得到正确的“UNICODE 字符串”。
不信的话可以试试,utf8和gb不能互相转换,只有iso-8859-1做中间码可以完美互相转码!!!