Quated-Printable解码及出错解决方式

来源:互联网 发布:51电子单片机原理图 编辑:程序博客网 时间:2024/06/14 00:14

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 "";    }}
1 0
原创粉丝点击