以下是根据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("=\n", ""); 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 ""; } }
|