Android的邮件编码网上的资料很少,但大体与JavaMail相似,在参考了网上关于JavaMail的资料,经过多次尝试,最终解决附件中文名乱码问题。
邮件附件名的编码与邮件名的编码可以如出一辙。因为多功能Internet邮件扩充服务协议,即MIME(Multipurpose Internet Mail Extensions)对附件名的规定是US-ASCII(应该也是ASCII),因此该乱码bug的出现与Java和Android无关,是MIME的 不规范。
邮件的标题,用了一种更简短的格式来标注“字符编码”和“传输编码”。比如,标题内容为 "中",则在邮件源代码中表示为: " =?GB2312?B?1tA=?= ",其中第一个

“=?”与“?”中间的部分指定了字符编码,在这个例子中指定的是 GB2312。“?”与“?”中间的“B”代表 Base64。如果是“Q”则代表 Quoted-Printable。最后“?”与“?=”之间的部分,就是经过 GB2312 转化成字节串,再经过Base64 转化后的标题内容。如果“传输编码”改为 Quoted-Printable,同样,如果标题内容为 "中":"=?GB2312?Q?=D6=D0?= " 。
根据上面解释,那么解决这个bug已经没有问题了。在我们找到读取附件名的地方,如mFileName,位于Email/provider/EmailContent.java,首先对其进行base64Encode编

码:String name = com.android.email.Utility.base64Encode(mFileName),然后强制给name添加编码头和 尾:String name2 = "=?utf8?B?" + name + "?="。这样接受邮件的客户端在检测到"=?utf8?B?"的时候,会对字符串进行base64和utf-8的转码,乱码也就不再出现。

更多相关文章

  1. 隐藏Android(安卓)系统自带的v7.widget.Toolbar的标题
  2. Android(安卓)获取屏幕高度、标题高度、状态栏高度详解
  3. Android使用setCustomTitle()方法自定义对话框标题
  4. Android(安卓)http中文乱码问题
  5. PreferenceActivity用法简介
  6. PreferenceActivity用法简介【转】
  7. [置顶] android利用zbar二维码扫描-(解决中文乱码及扫描区域定义
  8. Android如何获取系统高度、标题栏和状态栏高度
  9. PreferenceActivity

随机推荐

  1. Android应用数据存储几种方式(1)
  2. [转]Jollen 的 Android 教學,#26: 強大的
  3. Android socket AsyncTask和linux服务端
  4. Android 多线程之HandlerThread 详解
  5. 关于Android上面配置硬件加速的问题
  6. Android性能优化汇总
  7. Android与WebWiew的同步和异步访问机制
  8. Android App模块化及工程扩展
  9. Android系统framework的base目录下编译生
  10. Android lrucache 实现与使用(Android内存