Quated-Printable解碼及出錯解決方式

Quated-Printable解碼及出錯解決方式

由於項目需要採用Quated-Printable,看了網上許多的解碼程序,但解析後總出現中文亂碼,於是比對代碼後發現有點出入:
return new String(buffer.toByteArray(),“GBK”);
很多程序返回的字符串如上所示,或者爲“UTF-8”格式,按照他的程序,我的程序得到的結果永遠是亂碼,於是乎把中文格式去掉,可得滿意的結果。
還有一個問題,當自己在敲代碼的時候一定要注意區分l和1。

附上正確的代碼:

public final static String qpDecoding(String str)
    {
        if (str == null){
           return "";
          }
        try{
           str = str.replaceAll("= ", "");
           byte[] bytes = str.getBytes("US-ASCII");
           for (int i = 0; i < bytes.length; i++){
            byte b = bytes[i];
            if (b != 95){
             bytes[i] = b;
            }
            else {
               bytes[i] = 32;
               }
           }   
           if (bytes == null){
            return "";
           }
    //二進制讀取
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    for (int i = 0; i < bytes.length; i++){
         int b = bytes[i];
         if (b =='='){
          try{
    //對數據操作
    int u = Character.digit((char) bytes[++i], 16);
    int l = Character.digit((char) bytes[++i], 16);
    if (u == -1 || l == -1){
        continue;
        }
    //這裏是l不是1,看官請注意
    buffer.write((char) ((u << 4) + l));
    }
catch (ArrayIndexOutOfBoundsException e){
    e.printStackTrace();
        }
 }
else{
    buffer.write(b);
    }
}
 /*
 * 這條很關鍵,由於看了很多形式爲 String(buffer.toByteArray(),"utf-8"(/"gbk")),得到的結果爲中文亂碼。於是乎,看了一篇博文,乾脆就不用格式,最終得到正確的中文字符
*/
    return new String(buffer.toByteArray());
    }
catch (Exception e){
    e.printStackTrace();
    return "";
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章