`

Email中附件名称中包含中文字符显示乱码

阅读更多
Email中附件名称中包含中文字符显示乱码是因为附件虽包含了中文字,但没有指定对应的编码,导致Android按默认编码UTF-8去显示中文字而显示了乱码

邮件中的附件名称包含中文字并指定了encode
Content-Type: audio/mpeg; name="=?gb2312?B?us+zyS5tcDM=?="
Content-Description: =?gb2312?B?us+zyS5tcDM=?=
Content-Disposition: attachment; filename="=?gb2312?B?us+zyS5tcDM=?=";
size=6313900; creation-date="Wed, 13 Sep 2017 10:01:46 GMT";
modification-date="Tue, 28 Nov 2017 08:41:13 GMT"
Content-Transfer-Encoding: base64


邮件中的附件名称包含中文字未指定encode
----_com.android.email_1076710617800
Content-Type: image/png;
name="朱.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="朱.png";
size=58864

修正
android\packages\apps\Email\provider_src\com\android\email\LegacyConversions.java
 @VisibleForTesting
    protected static Attachment mimePartToAttachment(final Part part) throws MessagingException {
        // Transfer fields from mime format to provider format
        String contentType = MimeUtility.unfoldAndDecode(part.getContentType());
        String ramContentType = part.getContentType();
        if (ramContentType.indexOf("=?") == -1) {
            LogUtils.v(LogUtils.TAG, "original contentType donnot contain charset and encode");
            String unfoldContentType = MimeUtility.unfold(ramContentType);
            try {
                String charset = getEncoding(unfoldContentType);
                LogUtils.v(LogUtils.TAG, "translate the contentType with: " + charset);
                contentType = new String(unfoldContentType.getBytes(charset), "UTF-8");
            } catch (UnsupportedEncodingException e) {
                LogUtils.v(LogUtils.TAG, "translate the contentType happen UnsupportedEncodingException: ");
                contentType = MimeUtility.unfoldAndDecode(part.getContentType());
            }
        } else {
            contentType = MimeUtility.unfoldAndDecode(part.getContentType());
        }
......


  private static String getEncoding(String str) {
        String encode[] = new String[]{
                "ISO-8859-1",
                "GB2312",
                "GBK",
                "GB18030",
                "Big5",
                "Unicode",
                "ASCII",
                "UTF-8"
        };
        for (int i = 0; i < encode.length; i++) {
            try {
                if (str.equals(new String(str.getBytes(encode[i]), encode[i]))) {
                    return encode[i];
                }
            } catch (Exception ex) {
                LogUtils.v(LogUtils.TAG, "getEncoding: " + ex.toString());
            }
        }

        return "UTF-8";
    }
分享到:
评论

相关推荐

    文件下载response.setHeader()下载中文文件名乱码问题解决办法.pdf

    但是,如果文件名包含中文字符,可能会出现乱码问题。这是因为 HTTP 消息头中的中文字符需要进行编码。 解决这个问题的方法是使用 email 附件名编码方法对文件名进行编码。可以使用 javax.mail.internet.* 包的 ...

    Java自带的Java-mail框架 163 邮件发送,支持多附件,没中文乱码

    在本案例中,我们将关注如何使用JavaMail发送带有多个附件且不出现中文乱码的邮件,特别是通过163邮箱服务提供商。 1. **JavaMail API基础**: JavaMail API提供了一系列的类和接口,如`Session`,`Message`,`...

    基于python发送邮件的乱码问题的解决办法

    在Python中发送带有中文内容的邮件时,可能会遇到乱码问题。这主要是因为编码不一致导致的。在本文中,我们将探讨如何解决Python发送邮件时出现的乱码问题。 首先,我们要了解邮件编码的基本概念。电子邮件标准规定...

    php发邮件,屏蔽乱码

    **多部分编码**:对于包含HTML、文本和附件的复杂邮件,PHPMailer支持多部分编码(MIME)。这可以确保邮件在不同客户端上显示一致。例如,你可以设置HTML和纯文本版本的邮件内容: ```php $mail-&gt;isHTML(true); // ...

    javaMail发送邮件 发送成功 收不到邮件 或收到邮件无主题无收件人乱码

    在使用JavaMail进行邮件发送的过程中,可能会遇到以下几种常见问题:发送成功但收件方未收到邮件、邮件收到后无主题或无收件人信息以及邮件内容出现乱码等情况。本文将详细探讨这些问题的原因及相应的解决方案。 ##...

    java 发送email 邮件

    对于附件的文件名,同样需要处理编码,因为某些字符可能在某些邮件客户端中显示不正确。 在实际应用中,你可能需要对异常进行更细致的处理,并考虑使用异步方式发送邮件以避免阻塞主线程。此外,为了提高安全性,不...

    一个能发邮件的文本编辑器

    Python的默认编码可能是ASCII,不支持中文字符,因此在保存包含中文内容的文件时,如果不指定正确的编码(如UTF-8),可能会导致数据丢失或乱码。"Python的编码很蛋疼"可能是因为开发者在处理这个问题时遇到了困扰,...

    spring整合freemarker发送邮件例子

    首先,编写一个Freemarker模板文件,比如`email.ftl`,在这个模板中可以包含变量和逻辑,用于动态生成邮件内容。然后,使用`Template`类加载模板并填充数据,生成HTML字符串。 对于内嵌图片,我们需要在HTML中使用`...

    电子邮件编码

    - 文件名和模式在编码文件中作为头部信息被包含。 #### 二、xxencode 编码技术 **xxencode**与 uuencode 类似,但使用了不同的字符集。相比于 uuencode,xxencode 使用的特殊字符较少,因此在一些情况下可能会更...

    VB发送电子邮件!!!(绝对管用)

    需要注意的是,示例代码中的邮件主题和正文内容使用了乱码字符,实际应用时应确保使用正确的字符编码。 ##### 4. 配置SMTP服务器 ```vb Email.Configuration.Fields.Item(NameS & "sendusing") = 2 Email....

    替代System.Web.Mail的新类库(新增邮件列表功能).doc

    - 中文编码:支持系统默认或用户自定义的中文编码方式,以解决中文字符乱码问题。 4. 验证支持:类库允许进行身份验证,这是现代SMTP服务器通常要求的,以防止滥用和垃圾邮件。 5. 匿名发送:用户可以使用此功能...

    MuseMail Server邮件服务器软件 v5.2.zip

    4.webmail中个人配置中的发件人名称长度改成了最多可输入8个汉字; 5.完善了网络磁盘中的子目录的分页功能; 6.改善了webmail界面的操作友好性,如发邮件时信体中提到"附件"而没有加时会自动提示用户应该添 加附件...

    Asp.Net 发送邮件(Email) 实例 代码 亲测 可用.rar

    需要注意的是,实际应用中要考虑的其他因素包括错误处理、邮件格式(HTML或纯文本)、邮件编码(防止特殊字符乱码)以及邮件安全问题(如SSL/TLS加密连接)。在使用提供的代码实例前,应确保满足这些需求,并根据...

    Domino邮件发送全攻略

    同时,你可能还需要在"Internet Name and Address"部分为"令狐冲"这样的中文用户名设置别名,使得在Foxmail等邮件客户端中,收件人能看到正确的发件人名称,而不仅仅是乱码或者ID。 最后,不要忘记在完成所有配置后...

Global site tag (gtag.js) - Google Analytics