为了账号安全,请及时绑定邮箱和手机立即绑定

由于工程量较大,将工程的编码全部转换并不现实吧?

由于工程量较大,将工程的编码全部转换并不现实吧?

一只甜甜圈 2023-04-20 19:15:31
有这么个问题,合作公司给我们提供了一个jar包(不能改动),我们根据其提供的一个方法来获取返回的String型的xml信息,对方使用的是gbk编码格式,而我们的工程使用的是utf-8。 在测试环境下,我获取了返回的xml后用 new String(strXml.getBytes("gbk"), "utf-8") 转换后还是乱码,但是将 eclipse->Window->General->Content Types->Java Source File的编码由utf-8改为gbk后,返回的strXml即为正常的汉字,没有乱码。请问哪位高手碰到过类似问题,如何将其编码转换为utf-8. 
查看完整描述

2 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

你们的工程虽然用的是utf8,但是单个文件可以改动编码。

查看完整回答
反对 回复 2023-04-23
?
RISEBY

TA贡献1856条经验 获得超5个赞

public static String GBK2UTF8(String gbkStr) {  

        try {  

            return new String(gbk2utf8(gbkStr), "UTF-8");  

        } catch (UnsupportedEncodingException e) {  

            throw new InternalError();  

        }  

    }  

  

    private static byte[] gbk2utf8(String gbkStr) {  

        int n = gbkStr.length();  

        byte[] utfBytes = new byte[3 * n];  

        int k = 0;  

        for (int i = 0; i < n; i++) {  

            int m = gbkStr.charAt(i);  

            if (m < 128 && m >= -128) {  

                utfBytes[k++] = (byte) m;  

                continue;  

            }  

            String word = Integer.toBinaryString(m);  

  

            StringBuilder sb = new StringBuilder();  

            int len = 16 - word.length();  

            sb.append("1110");  

            for (int j = 0; j < len; j++) {  

                sb.append("0");  

            }  

            sb.append(word);  

            sb.insert(8, "10");  

            sb.insert(16, "10");  

  

            String s1 = sb.substring(0, 8);  

            String s2 = sb.substring(8, 16);  

            String s3 = sb.substring(16);  

  

            byte b0 = Integer.valueOf(s1, 2).byteValue();  

            byte b1 = Integer.valueOf(s2, 2).byteValue();  

            byte b2 = Integer.valueOf(s3, 2).byteValue();  

            utfBytes[k++] = b0;  

            utfBytes[k++] = b1;  

            utfBytes[k++] = b2;  

        }  

        if (k < utfBytes.length) {  

            byte[] tmp = new byte[k];  

            System.arraycopy(utfBytes, 0, tmp, 0, k);  

            return tmp;  

        }  

        return utfBytes;  

    }  


查看完整回答
反对 回复 2023-04-23
  • 2 回答
  • 0 关注
  • 383 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信