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

  • 相关阅读:
    课堂作业
    大道至简读后感
    读《大道至简》有感
    大道至简第四章-流于形式的沟通
    Java课堂动手动脑-截图集锦
    Java动手动脑课后作业1-求创建对象个数
    Java-消息框显示两整数加减乘除
    JAVA-实践问题
    Java-整数相加求和
    大道至简-是懒人造就了方法
  • 原文地址:https://www.cnblogs.com/kiko2014551511/p/13609036.html
Copyright © 2020-2023  润新知