亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

由于工程量較大,將工程的編碼全部轉換并不現實吧?

由于工程量較大,將工程的編碼全部轉換并不現實吧?

一只甜甜圈 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 關注
  • 440 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號