java snmp4J获取window信息中文乱码

cowpoke 发布于 09/12 10:18
阅读 70
收藏 0

通过snmp获取window信息,遇到中文为16进制,死活转换不了。具体信息如下:
oid为获取window系统时间:1.3.6.1.2.1.25.1.2.0 = 07:e3:09:0b:15:06:14:06
如上信息通过以下几种方法转换后都为乱码,包括指定编码:UTF-8,GBK、GB2312、ISO-8859-1 转换都为乱码。
以下几种尝试都失败,那位大神看看如何转换。
 

public static String getChinese(String octetString) {    //snmp4j遇到中文直接转成16进制字符串
        try {
            String[] temps = octetString.split(":");
            byte[] bs = new byte[temps.length];
            for (int i = 0; i < temps.length; i++)
                bs[i] = (byte) Integer.parseInt(temps[i], 16);

            //GB2312  ISO-8859-1 ASCII
            return new String(bs,"GB2312");
        } catch (Exception e) {
         e.printStackTrace();
            return null;
        }
    }


public static String hexStr2Str(String hexStr) throws UnsupportedEncodingException {
    String str = "0123456789ABCDEF";
    char[] hexs = hexStr.toCharArray();
    byte[] bytes = new byte[hexStr.length() / 2];
    int n;
    for (int i = 0; i < bytes.length; i++) {
        n = str.indexOf(hexs[2 * i]) * 16;
        n += str.indexOf(hexs[2 * i + 1]);
        bytes[i] = (byte) (n & 0xff);
    }
    return new String(bytes);
}



public static String hexStringToString(String s) {
    if (s == null || s.equals("")) {
        return null;
    }
    s = s.replace(" ", "");
    byte[] baKeyword = new byte[s.length() / 2];
    for (int i = 0; i < baKeyword.length; i++) {
        try {
            baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    try {
        s = new String(baKeyword, "UTF-8");
        new String();
    } catch (Exception e1) {
        e1.printStackTrace();
    }
    return s;
}

 

返回顶部
顶部