【snmp】java调用snmp4j中文乱码问题解决

 一、乱码原因

  默认超过128的位数的字节,都按16进制处理。如ASCII控制字符,汉字等,都以16进制显示

 

 

二、解决乱码

1、将16进制转文本

public String hexToString(String variableString){
        String result = variableString;
        if(!(variableString.indexOf(":") == -1)) {
            String[] temps = variableString.split(":");
            byte[] bs = new byte[temps.length];
            try{
                for(int j = 0;j<temps.length;j++){
                    //转换byte[]
                    bs[j] = (byte)Integer.parseInt(temps[j],16);
                }
                //转换String,这里编码是utf-8,可设置,根据发snmp的编码集来
                result = new String(bs,"utf-8");
            }catch (Exception e) {
                //一些字符不能转16进制,返回原内容
                return result;
            }
        }
        return result;
    }
  • 需要注意的是如果内容中原本就含有冒号(:),用以上方法会报错
  • 这里16进制转文本的编码是"utf-8",那么如何确存储的内容的编码也是"utf-8"呢? set值的时候可以设置编码

2、set字符串(OctetString)内容到snmp代理端设置编码

public OctetString setOctetStringWithCode(String value ){
        OctetString octetString = new OctetString();
        try {
            octetString.setValue(value.getBytes("utf-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return octetString;
    }

 

 

参考地址

SNMP4J中文乱码问题

Snmp乱码问题

 

posted @ 2020-09-04 09:27  harara  阅读(1430)  评论(0编辑  收藏  举报