关于java编码的转换

有这么个问题,合作公司给我们提供了一个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.
ps:由于工程量较大,将工程的编码全部转换并不现实。

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

文件的编码 没有太多方式 :oops:

你得把相关的文件的编码都变成gbk试试

:oops:

[code="java"]
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;
}

[/code]

可行就多给点分, :D