一、乱码原因
默认超过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; }
参考地址