我有问题。我使用Spring Integration将抛出的IMAP连接到邮件服务器并从中获取消息。 但是据我了解,不同的消息(来自不同的发件人)具有不同的主题编码(或格式),因此,当我尝试处理这些消息时
@ServiceActivator
public List<Message<?>> handle(javax.mail.Message eMailMessage) throws MessagingException {
Address[] addresses = eMailMessage.getFrom();
String subj = eMailMessage.getSubject();
...
}
我有这样的想法
Óâåäîìëåíèå î íîâîé òåìå â ïîäïèñàííîì ôîðóìå
。
因此,我尝试使用库来了解此文本使用的编码(文本具有西里尔字母)。
在当前情况下,我的文字采用ISO-8859-1编码。
为了找到编码,我尝试使用org.apache.tika.parser:
private static String checkForErrorDecoding(String str)
throws UnsupportedEncodingException {
byte bytes[] = str.getBytes();
CharsetDetector detector = new CharsetDetector();
detector.setText(bytes);
CharsetMatch charset = detector.detect();
CharsetMatch charsets[] = detector.detectAll();
String charsetName = charset.getName();
if(charsetName.equalsIgnoreCase("windows-1251"))
return str;
bytes = str.getBytes(charsetName);
}
但是在某些情况下,该库(apache.tika)获得不同类型的编码:
Óâåäîìëåíèå î íîâîé òåìå â ïîäïèñàííîì ôîðóìå ( From VRPN )
和
Óâåäîìëåíèå î íîâîé òåìå â ïîäïèñàííîì ôîðóìå
在第一种情况下,它返回正确的ISO-8859-1(以及字符集变量中的其他类型的编码,例如UTF-8,...,但是ISO-8859-1是数组中的第一个)。在第二种情况下,它返回UTF-8(在charsets变量中,我完全看不到ISO-895-1编码)。
我该怎么办?
或者也许当我想使用不同的编码时,最好使用原始头,但是我不明白如何从Spring Integration中获取原始邮件头(或完整消息)。
当我查看日志时,比看到的
21 FETCH (ENVELOPE ("Tue, 03 Sep 2013 19:37:45 +0400" "=?koi8-r?b?9dfFxM/NzMXOycUgzyDOz9fPyg==?= =?koi8-r?b?INTFzcUg1yDQz8TQydPBzs7PzQ==?= =?koi8-r?b?IMbP0tXNxQ==?=" ...
因此,我认为最好使用原始标头
"=?koi8-r?b?9dfFxM/NzMXOycUgzyDOz9fPyg==?= =?koi8-r?b?INTFzcUg1yDQz8TQydPBzs7PzQ==?= =?koi8-r?b?IMbP0tXNxQ==?="
并且我知道在base64解码之后,我将使用KOI8-R编码文本。 但是我不明白如何获取原始标头。