apache骆驼主题标题,显示日语字符“ =?iso-2022-jp ..”

时间:2019-01-12 08:46:34

标签: java unicode encoding apache-camel

我有下面的Java代码,该代码从收件箱中选择一封电子邮件,并写入以日语文本为主题的activeMQ队列。

public class SimpleRouteBuilder extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("imaps://outlook.office365.com?username=*****&password=****&unseen=true&connectionTimeout=600000&mapMailMessage=truecopyTo=out")
        .process(new MyProcessor())
        .to("jms:queue:OUTqueue");

    }
}

MyProcessor()中,我正在检索

String sub = exchange.getIn().getHeader("Subject").toString();

此主题返回"=?iso-2022-jp?B?UkU6IBskQiFaJDQwTU1qIVsbKEJqYXBhbmVzZQ==?="而不是实际的日语文本,正文没有问题。

任何帮助如何获取主题的日语文本?

2 个答案:

答案 0 :(得分:2)

getHeader方法返回原始标头值,并使用RFC-2047文本编码对其进行编码。假设您正在使用JavaMail,则可以使用javax.mail.internet.MimeUtility,特别是MimeUtility.decodeText对其进行解码(对于完全正确的行为,unfold,请参见下面的代码,尽管显示的值不是必需的)。

或者,如果这是JavaMail Message(特别是MimeMessage或子类),则使用getSubject()代替getHeader("Subject")。这将自动解码该值。参见JavaMail 1.6.2中的实现:

public String getSubject() throws MessagingException {
    String rawvalue = this.getHeader("Subject", (String)null);
    if (rawvalue == null) {
        return null;
    } else {
        try {
            return MimeUtility.decodeText(MimeUtility.unfold(rawvalue));
        } catch (UnsupportedEncodingException var3) {
            return rawvalue;
        }
    }
}

例如,以下代码:

String encodedValue = "=?iso-2022-jp?B?UkU6IBskQiFaJDQwTU1qIVsbKEJqYXBhbmVzZQ==?=";
String decodedValue = MimeUtility.decodeText(encodedValue);
System.out.println(decodedValue);

将打印出

RE: 【ご依頼】japanese

答案 1 :(得分:0)

将...消息更改为字节[]以适合您的情况。

byte[] text = ... message as byte[];
String textAsUnicode = new String(text,"ISO2022JP");

Oracle's list of supported encodings