我正在使用邮件应用程序,我在解码mime编码文本方面遇到了一些麻烦。我正在使用MimeUtility.decode()但它不适用于每个编码文本。有些文本被正确解码,但有些文本没有。
这些无法解码的编码文本特别具有utf-8和iso-8859-9编码类型。
我如何解决这个问题??
这是我用于解码的代码
MimeUtility.decodeText(text);
这些是失败文字的示例:
答案 0 :(得分:7)
****解决方案***** (感谢@ user_xtech007)
我通过使用正则表达式分割多个编码部分来解码编码部分的问题。
以下是我使用
的方法的代码private final String ENCODED_PART_REGEX_PATTERN="=\\?([^?]+)\\?([^?]+)\\?([^?]+)\\?=";
private String decode(String s)
{
Pattern pattern=Pattern.compile(ENCODED_PART_REGEX_PATTERN);
Matcher m=pattern.matcher(s);
ArrayList<String> encodedParts=new ArrayList<String>();
while(m.find())
{
encodedParts.add(m.group(0));
}
if(encodedParts.size()>0)
{
try
{
for(String encoded:encodedParts)
{
s=s.replace(encoded, MimeUtility.decodeText(encoded));
}
return s;
} catch(Exception ex)
{
return s;
}
}
else
return s;
}
答案 1 :(得分:3)
将您收到的字符串转换为字节数组,然后使用它来解码utf-8文本
String s2 = new String(bytes, "UTF-8");
首先将ISO-8859-1文本转换为再见数组,然后将其转换为字符串
byte[] b2 = s.getBytes("ISO-8859-1");
要从uri获取编码字符串,可以使用Regex
答案 2 :(得分:2)
您也可以通过输入
来解码此字符串System.setProperty("mail.mime.decodetext.strict", "false");
使用MimeUtility.decodeText(text);
这将确保“内部词”也被解码:
mail.mime.decodetext.strict 属性控制MIME的解码 编码的单词。 MIME规范要求编码的单词从 一个空格分隔的单词的开头。一些邮件错误 在单词的中间包括编码的单词。如果 mail.mime.decodetext.strict系统属性设置为“false”,an 将尝试解码这些非法编码的单词。该 默认为真。
https://docs.oracle.com/javaee/7/api/javax/mail/internet/MimeUtility.html