记录一次关于java访问http接口返回值中文奇数乱码,偶数正常的问题

记录一次关于java访问http接口返回值中文奇数乱码,偶数正常的问题

首先你要清楚 GBK 直接转 UTF-8 会出现问题,因为 GBK 中一个汉字是 2 个字节,UTF-8 中一个汉字是 3 个字节。所以这里你要解决的问题就是要把 GBK 中的 2 个字节在转换成 UTF-8 的时候对应成 3 个字节这样就好了。

public class Test1 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String gbk = "蜡笔小新新";  
        String utf8 = new String(gbk.getBytes("UTF-8"));  
        for (byte b : gbk.getBytes("UTF-8")) {  
            System.out.print(b + " ");  
        }  
        System.out.println();  
        for (byte b : utf8.getBytes()) {  
            System.out.print(b + " ");  
        }
    }
}
/* 这里是控制台输出
	转成UTF-8
	-24 -100 -95 -25 -84 -108 -27 -80 -113 -26 -106 -80 -26 -106 -80
	原来的GBK  
	-24 -100 -95 -25 -84 -108 -27 -80 -113 -26 -106 -80 -26 -106 63   
*/

public class Test1 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String gbk = "蜡笔小新";  
        String utf8 = new String(gbk.getBytes("UTF-8"));  
        for (byte b : gbk.getBytes("UTF-8")) {  
            System.out.print(b + " ");  
        }  
        System.out.println();  
        for (byte b : utf8.getBytes()) {  
            System.out.print(b + " ");  
        }
    }
}

/* 控制台输出
	转成UTF-8
	-24 -100 -95 -25 -84 -108 -27 -80 -113 -26 -106 -80
	原来的GBK  
	-24 -100 -95 -25 -84 -108 -27 -80 -113 -26 -106 -80
*/

上面的示例大家应该知道了吧,字节的问题会导致 GBK 转换 UTF-8 的时候出现奇数中文乱码,偶数正常的问题。这里就是原因,大家可以自己手动实验一下,下面可以正确的解决这个问题。

	String str = "蜡笔小新新";  
    String iso = new String(str.getBytes("UTF-8"),"ISO-8859-1");  
    for (byte o : iso.getBytes("ISO-8859-1")) {  
        System.out.print(o + " "); 
    }  
    System.out.println();  
  
    //模拟UTF-8编码的网站显示  
    System.out.println(new String(iso.getBytes("ISO-8859-1"),"UTF-8"));  

/*
	-24 -100 -95 -25 -84 -108 -27 -80 -113 -26 -106 -80 -26 -106 -80	
	蜡笔小新新
*/

**

如果发现这个还是解决不了问题的话,可以看下面

**

	InputStream in = urlConnection.getInputStream();
	//这里是重点
	BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));

首先你去找到你的 HTTP 工具类 在输入流的地方加入这行代码,就没有问题了。

	,"UTF-8"
	InputStream in = urlConnection.getInputStream();
	//这里是重点
	BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值