GBK与UTF-8多次转换乱码问题,急求解!

来源:百度知道 编辑:UC知道 时间:2024/05/17 04:04:46
现在项目中有需求需要将字符串进行多次转码,非常郁闷的是GBK转换成ISO以后还可以转换回来,但是GBK转换成UTF-8以后回转的时候会乱码,网上看了N多的文章也没帮助解决问题,求高手们帮忙解决一下,非常感谢!!
下面是一段测试程序,public class Test {
public static void main(String[] args) throws Exception{
String gbk = "郁闷";
String iso = null;
String utf = null;
iso = new String(gbk.getBytes("GB2312"),"ISO-8859-1");
utf = new String(gbk.getBytes("GB2312"),"UTF-8");
System.out.println(new String(iso.getBytes("ISO-8859-1"),"GB2312"));
System.out.println(new String(utf.getBytes("UTF-8"),"GB2312"));
}
}
程序输出:
郁闷
锟斤拷
谢谢fangliangliang的回答~~ 可是我想转换GBK到UTF-8该怎样操作呢?

getBytes 的功能是将字符转换成字节数组,
gbk.getBytes("GB2312") 用GB2312翻译成字节数组,
new String(gbk.getBytes("GB2312"),"UTF-8");
把用GB2312翻译成字节数组,再用UTF-8翻译成字符串。
兄弟你想下,这里有没有问题?
这就是乱码的原因。

下面再分析下你具体的问题:
GB23121 -》ISO-8859 两个字节到一个字节
反过来,再一个字节到两个字节,不会有问题,
因为翻译时,个数不会多也不会少。

再看GBK -》UTF-8 两个字节翻译的字节数组现在要用三个字节翻译
就是说你 4个字节给人家 人家是一次要三个,出现什么情况?
拿了三个 剩下一个不够,人家就自己去添加。
你再翻译回来的时候就是 6个字节了,也说明为什么变成了三个字

提供一个转换方法:
public byte[] gbk2utf8(String chenese){
char c[] = chenese.toCharArray();
byte [] fullByte =new byte[3*c.length];
for(int i=0; i<c.length; i++){
int m = (int)c[i];
String word = Integer.toBinaryString(m);
// System.out.println(word);

StringBuffer sb = new StringBuffer();
int len = 16 - word.length();
//补零