一、亂碼原因
默認超過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; }
參考地址