`
qq123zhz
  • 浏览: 530619 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Quoted-Printable qp编码实现,在vcf导出会用到

 
阅读更多
package com.chinaGPS.driverBook.util;

import java.io.ByteArrayOutputStream;

/**Qp编码
 * @author zhz
 *
 */
public class QpEncodeUtil {
	/** 
	  * quoted-printable编码 
	  */  
	 public static String qpEncodeing(String str) {  
	     return qpEncodeing(str, "UTF-8");  
	 }  
	 /** 
	  * quoted-printable解码 
	  * 
	  * @param str 
	  * @return 无 
	  */  
	 public static String qpDecoding(String str) {  
	     return qpDecoding(str, "UTF-8");  
	 }  
	  
	 /** 
	  *  quoted-printable编码 
	  * @param str 
	  * @param charsetName 
	  * @return 
	  */  
	 private static String qpEncodeing(String str, String charsetName) {  
	     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(charsetName);  
	             }  
	             catch (Exception e) {  
	                 e.printStackTrace();  
	             }  
	             //UTF-8: buf.length == 3   
	             //GBK:  buf.length == 2   
	             if (buf.length == 3 || buf.length == 2) {  
	                 for (int j = 0; j < buf.length; 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();  
	 }  
	  
	 private static String qpDecoding(String str, String charsetName) {  
	     if (str == null) {  
	         return "";  
	     }  
	     try {  
	         StringBuffer sb = new StringBuffer(str);  
	         for (int i = 0; i < sb.length(); i++) {  
	             if (sb.charAt(i) == ' ' && sb.charAt(i - 1) == '=') {  
	                 // 解码这个地方也要修改一下   
	                 // sb.deleteCharAt(i);   
	                 sb.deleteCharAt(i - 1);  
	             }  
	         }  
	         str = sb.toString();  
	         byte[] bytes = str.getBytes("US-ASCII");  
	         if (bytes == null) {  
	             return "";  
	         }
	         for (int i = 0; i < bytes.length; i++) {  
	             byte b = bytes[i];  
	             if (b != 95) {  
	                 bytes[i] = b;  
	             } else {  
	                 bytes[i] = 32;  
	             }  
	         }  
	          
	         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(), charsetName);  
	     }  
	     catch (Exception e) {  
	         e.printStackTrace();  
	         return "";  
	     }  
	 }  
}

 

分享到:
评论

相关推荐

    Quoted-printable 编码介绍、Quoted-printable编码解码转换方法

    当邮件需要包含非ASCII字符或二进制格式附件时,MIME标准就会使用Quoted-printable编码。 MIME是多用途互联网邮件扩展(Multipurpose Internet Mail Extensions)的缩写,它是一个扩展了传统电子邮件标准的互联网...

    smtp.tar.gz_quoted-printable

    在`smtp.tar.gz_quoted-printable`这个压缩包中,很可能包含了实现`quoted-printable`编码功能的源代码或者示例。解压这个文件后,可以查看`smtp`文件来了解具体实现的细节。这可能是一个程序、脚本或者文档,详细...

    Quoted_Printable编码解码易语言源码

    Quoted_Printable编码是一种在电子邮件和网页中常见的字符编码方式,用于在ASCII字符集中表示非ASCII字符,确保数据在传输过程中不会被误解或丢失。这种编码方式特别适用于7位ASCII字符集不能涵盖的字符,例如某些...

    C# Quoted-Printable编码、解码

    在C#中实现Quoted-Printable编码和解码的功能,对于处理邮件或需要对特定数据进行编码的场景非常有用。 编码(Encoding)是将数据转换为另一种形式的过程,这种形式可以在特定的媒介或系统上存储或传输,而不会丢失...

    MIME Quoted Printable &amp; Base64 编码解码程序

    在提供的"**MIME(Quoted-Printable & Base64) 编码解码程序**"中,很可能包含了实现这两种编码方式的源代码。这样的程序通常包含输入和输出函数,用于将用户输入的文本进行编码或解码。编码函数会接收原始数据,根据...

    excel和vcf互转工具

    用途:使用excel编辑联系人,导出vcf文件 ------------------------------------------------------------ ...4、支持备注QUOTED-PRINTABLE编码解码 5、支持项目多值(多个工作电话号码,传真,QQ等)

    易语言-Quoted_Printable编码解码易语言

    Quoted_Printable是一种字符编码方式,常用于电子邮件和纯文本文件中,以确保非ASCII字符或可能会引起混乱的特殊字符(如空格、换行符)在传输过程中能正确无误地显示。在易语言中,我们可以编写程序来实现这种编码...

    邮件编码解码工具 md5,base64,qp编码解码,非常小巧有用

    md5,base64,qp编码解码,非常小巧有用

    C# 生成VCF demo源代码,支持Android,outlook QuotedPrintable 中文编码

    总结来说,这个C#的VCF demo源代码提供了一个处理中文编码的解决方案,通过使用Quoted-Printable编码,确保了在Android、Outlook等平台上的跨平台兼容性。在实际开发中,理解VCF文件格式和Quoted-Printable编码的...

    qp.rar_mime QP_qp_quoted printable_字节base64_邮件 ASCII

    Quoted-Printable编码的基本方法是:输入数据在33-60、62-126范围内的,直接输出;其它的需编码为“=”加两个字节的HEX码(大写)。为保证输出行不超过规定长度,可在行尾加“=\r\n”序列作为软回车。

    常用编码VBA.zip

    在"常用编码VBA.zip"这个压缩包中,包含了一系列用于处理不同编码方式的VBA宏,如Base64编码、Quoted-Printable编码、URL编码、UTF8编码和Unicode编码。 1. **Base64编码**:Base64是一种用64个字符来表示任意二...

    Quoted_Printable 解码-编码 -易语言

    在易语言中,理解和实现Quoted_Printable编码与解码是提高程序处理文本信息能力的重要一环。 Quoted_Printable 编码的基本原理是将每个8位的字节拆分为7位的ASCII字符,对于那些不能直接作为ASCII字符的字节,通常...

    VCF转CSV,适用所有设备导出的VCF文件

    在描述中提到的"适用所有设备导出的VCF文件"表明,这个程序设计得足够灵活,能够处理来自不同来源的VCF文件,尽管VCF标准是统一的,但不同的设备和应用可能会在文件中添加特定的元数据或扩展信息。因此,这个程序...

    修改vcf通讯簿

    2. **批量操作**:批量导入和导出vcf功能使得用户可以一次性处理多个文件,这在需要整合大量联系人信息时尤其方便,比如企业进行员工信息迁移或个人整理大量联系人。 3. **乱码处理**:乱码问题通常是由于字符编码...

    UTF-8_GB2312-Src

    当用户需要将从三星手机导出的UTF-8格式VCF文件在其他不支持UTF-8的设备上使用时,如旧款手机或某些特定软件,可能就会遇到无法正确显示中文字符的问题。此时,就需要进行编码转换。 "UTF-8_GB2312-Src"提供的工具...

    base64和quoted编码,解码的源码

    Base64和Quoted-Printable编码是两种常见的数据编码方式,它们被广泛应用于网络通信、电子邮件、文本传输等领域,以确保数据在不同系统间安全、正确地传递。 Base64编码是一种基于64个字符的编码方法,这64个字符...

    Excel转 vcf格式名片管理

    4、支持备注QUOTED-PRINTABLE编码解码 5、支持项目多值(多个工作电话号码,传真,QQ等) 备注: 1、关于备注项目的换行。 M8中录入带换行的备注,备份后,重新导入,换行丢失,可能是换行符windows,unix格式未转换...

    关于E-Mail信体的基本编码和解码方法email_coder.zip_E.ON mail_email_mail_quoted-

    提供关于E-Mail信体的基本编码和解码方法包括 Base64, UUCode, Quoted-Printble编解码速度快 全兼容Outlook Express 部分关键代码说明 全部类静态方法 毋需创建实例即可使用 使用说明 首先使用CMailCoder提供的获取...

    Excel转VCF工具

    功能: 1、vcf格式名片文件批量导入 2、自由编辑(Excel自身功能) 3、批量导出vcf格式文件 4、支持备注QUOTED-PRINTABLE编码解码 5、支持项目多值(多个工作电话号码,传真,QQ等)

Global site tag (gtag.js) - Google Analytics