【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