【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乱码问题

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM