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 "";
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值