当前位置: 首页 > 面试题库 >

使用JavaMail阅读阿拉伯文附件

宗政兴发
2023-03-14
问题内容

我使用Java Mail下载阿拉伯文附件文件时遇到问题。

文件名始终是不明确的。

问题是Bodypart检索附件为非UTF-8字符。

private void getAttachments(Message temp) throws IOException, MessagingException {
    List<File> attachments = new ArrayList<File>();

    Multipart multipart = (Multipart) temp.getContent();

    System.out.println(multipart.getCount());

    for (int i = 0; i < multipart.getCount(); i++) {
        BodyPart bodyPart = multipart.getBodyPart(i);
        if (!Part.ATTACHMENT.equalsIgnoreCase(bodyPart.getDisposition())) {
            continue; // dealing with attachments only
        }
        InputStream is = bodyPart.getInputStream();

        // getFilename always have wrong characters set 
        byte [] fileBytes = bodyPart.getFileName().toString().getBytes();

        String filename = new String(fileBytes, "UTF-8");

        File f = new File("C:\\Attachments\\" + filename);

         System.out.println(f .getName());

         try {
        if (f == null) {
            //filename = File.createTempFile("VSX", ".out").getName();
            return;
        }

        FileOutputStream fos = new FileOutputStream(f );
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        BufferedInputStream bis = new BufferedInputStream(is);

        int aByte;
        while ((aByte = bis.read()) >=0) {
            bos.write(aByte);
        }

        fos.flush();
        bos.flush();
        bos.close();
        bis.close();
        fos.close();
    } // end of try()
    catch (IOException exp) {
        System.out.println("IOException:" + exp);
    }

        attachments.add(f);
    }
}

问题答案:

标头是根据RFC 2047中描述的机制(即encoded-word)编码的,该机制表示与=? < encoding> ?B? <
encoded-bytes>_匹配的标头的部分?=是字节编码的部分。所述
< 编码>说如何解释的字节数,和(因为它是B风格,而不是Q样式)的

< 编码字节>_是基64编码。

这都是相当复杂的。幸运的是,您可以使用静态javax.mail.internet.MimeUtility.decodeText()方法轻松处理此问题。这意味着您可以切换到此:

String filename = MimeUtility.decodeText(bodyPart.getFileName());

实际上,最好也将其与下一行结合:

File f = new File("C:\\Attachments",
                  MimeUtility.decodeText(bodyPart.getFileName()));

这样做比较好,因为它避免了构建文件名的麻烦,而不是手工完成所有工作。(这还意味着您可以将该文字路径名分解为某些配置位置。)



 类似资料:
  • 在 Dreamweaver 中将双向流量应用到阿拉伯语和希伯来语文本;使用标签编辑器、“表格”属性和 Div 属性。 在中东和北非版本的此软件中,可通过阿拉伯语和希伯来语使用新的功能和改进功能。 双向文字流 中东语言的文字大多从右向左 (RTL) 书写。但是,一般而言,最常用的形式为双向 (bidi) 文字 - 混用从左向右和从右向左书写的文字。bidi 文字的一个示例是含有阿拉伯语和英语文字的段

  • 问题内容: 我正在评估NLTK处理阿拉伯文本的能力,这项研究旨在分析和提取情感。 问题如下: NTLK是否可以处理并允许分析阿拉伯文本? python是否能够操纵\标记阿拉伯文本? 我可以使用Python解析和存储阿拉伯文本吗? 如果python和NTLK不是完成这项工作的工具,那么您会推荐哪些工具(如果存在)? 谢谢。 编辑 根据研究: NTLK仅能阻止阿拉伯文本:链接 Python支持UTF-

  • 我正在使用扫描仪读取一个阿拉伯语文件,并将文本文件存储在ArrayList中 我有一本字典,里面有一些单词,肯定的和否定的,有thier比率的单词。

  • Adobe 亚洲语言书写器 借助 Adobe 亚洲语言书写器,您可以使用中东和南亚语言创建内容。您可以键入或混合键入阿拉伯语、希伯来语、英语和其他语言。 您可以在“段落”面板菜单(窗口 > 段落 > 面板菜单)中的可用书写器之间进行选择。例如,您可以使用中东和南亚语言单行书写器或中东和南亚语言逐行书写器。 有关 Illustrator 中支持的其他亚洲语言的更多信息,请参阅适用于亚洲语言文字的书写

  • 启用中东语言功能 若要在 Photoshop 界面中显示中东文字选项,请执行以下操作: 选取“编辑”>“首选项”>“文字”(Windows) 或“Photoshop”>“首选项”>“文字”(Mac OS)。 在“选取文本引擎选项”部分中,选取“中东”。 单击“确定”,并重新启动 Photoshop。 选取“文字”>“语言选项”>“中东语言功能”。 文本方向 要创建阿拉伯语和希伯来语内容,您可以将默

  • 需要一些帮助我有一个pdf,我只需要阅读它并将其内容存储在数据库中。出于某种原因,我找不到使用Itext 7实现这一点的简单示例 另一件事,内容是希伯来语的,起初我用的是iTextSharp,但我得到的内容是相反的顺序,所以我有两个选择:1。修正反向代码2。也许可以在Itext7中找到一个更正常的代码,它没有这个问题。 ConvertToHebrew函数对我来说并不完美,所以我希望能找到一些不需要