我有下面的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==?="
而不是实际的日语文本,正文没有问题。
任何帮助如何获取主题的日语文本?
答案 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");