Java中quoted-printable编码的实现
2007-09-10 08:36:25
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://syqin.blog.51cto.com/224951/41738 |
最近做J2ME电话本那块的项目,用到PIM那块有需要quoted-printable编码,自己做了quoted-printable编码的实现方法。
/**
* quoted-printable编码 */ public static String qpEncodeing(String str) { char[] encode = str.toCharArray(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < encode.length; i++) { if ((encode[i] >= '!') && (encode[i] <= '~') && (encode[i] != '=') && (encode[i] != '\n')) { sb.append(encode[i]); } else if (encode[i] == '=') { sb.append("=3D"); } else if (encode[i] == '\n') { sb.append("\n"); } else { StringBuffer sbother = new StringBuffer(); sbother.append(encode[i]); String ss = sbother.toString(); byte[] buf = null; try { buf = ss.getBytes("utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } if (buf.length == 3) { for (int j = 0; j < 3; j++)
{ String s16 = String.valueOf(Integer.toHexString(buf[j])); // 抽取中文字符16进制字节的后两位,也就是=E8等号后面的两位, // 三个代表一个中文字符 char c16_6; char c16_7; if (s16.charAt(6) >= 97 && s16.charAt(6) <= 122) { c16_6 = (char) (s16.charAt(6) - 32); } else { c16_6 = s16.charAt(6); } if (s16.charAt(7) >= 97 && s16.charAt(7) <= 122) { c16_7 = (char) (s16.charAt(7) - 32); } else { c16_7 = s16.charAt(7); } sb.append("=" + c16_6 + c16_7); } } } } return sb.toString(); } /** * quoted-printable解码 * * @author issuesr * @param str * @return 无 * @date 2007-6-24 */ public final static String qpDecoding(String str) { if (str == null) { return ""; } try { StringBuffer sb = new StringBuffer(str); for (int i = 0; i < sb.length(); i++) { if (sb.charAt(i) == '\n' && sb.charAt(i - 1) == '=') { // 解码这个地方也要修改一下 // sb.deleteCharAt(i); sb.deleteCharAt(i - 1); } } str = sb.toString(); 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(), "UTF-8"); } catch (Exception e) { e.printStackTrace(); return ""; } } 本文出自 “NovemberRain” 博客,请务必保留此出处http://syqin.blog.51cto.com/224951/41738 本文出自 51CTO.COM技术博客 |


QinGe331
博客统计信息
热门文章
最新评论
友情链接
