龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

java的quoted-printable解码器源代码

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
以下是根据apache-jcommons里的一组方法改写的一个方法,使用它可以用来解quoted-printable编码的字符串,类似 =B9=E3=B6=AB=D2=BB=BA=DA=CD=F8=B0=C9=C9=EE=D2=B9=C6=F0=BB=F0=B4= =F3=BB=F0 4=C8=CB=D4=E1=C9=ED=BB=F0

  以下是根据apache-jcommons里的一组方法改写的一个方法,使用它可以用来解quoted-printable编码的字符串,类似
  =B9=E3=B6=AB=D2=BB=BA=DA=CD=F8=B0=C9=C9=EE=D2=B9=C6=F0=BB=F0=B4=
  =F3=BB=F0 4=C8=CB=D4=E1=C9=ED=BB=F0=BA=A3
  这种,一般常用在邮件中,IE保存的MHT文件中也使用了这种编码。在网上很难搜索到Java实现,所以在此提供。
  public final 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;
        }
        buffer.write((char) ((u << 4) + l));
       }
       catch (ArrayIndexOutOfBoundsException e)
       {
        e.printStackTrace();
       }
      }
      else
      {
       buffer.write(b);
      }
     }
     return new String(buffer.toByteArray(), "GBK");
    }
    catch (Exception e)
    {
     e.printStackTrace();
     return "";
    }
   }
  
精彩图集

赞助商链接