奇怪的字符(?)添加到我的主题文本的末尾

时间:2012-02-21 13:02:43

标签: java character-encoding jms javamail

我的java代码向用户发送电子邮件时遇到问题。电子邮件的编码存在一些问题。当电子邮件到达电子邮件帐户时,主题行($ subject)会出现编码问题,因为在我的主题文本末尾添加了奇怪的字符(?)。

电子邮件内容本身很好,只是主题行(?)我已经搜索了所有但无法找到,使用Unicode和内容类型作为text / html邮件正文没有特殊字符的问题 (ó)但相同的修复不适用于主题行。

我有一个发送带有javamail的电子邮件的类,文本类似于 这个主题:

  

“EstimadoIvánEscobedo:

问题是当邮件到达目的地时,它 以这种方式到达:

  

“Estimado Iv?n Escobedo:

所有áéíóú等特殊字符都替换为?

可能是什么问题以及如何解决?

1 个答案:

答案 0 :(得分:2)

您应该使用类似的东西来正确阅读邮件:

TextMessage txtMessage = (TextMessage)message;
ByteArrayInputStream bais = new ByteArrayInputStream(txtMessage.getText().getBytes ("ISO-8859-15"))

修改:

Sanjay找到了解决方案。

为了在发送前正确设置消息,请使用:

MimeUtility.encodeText(SubjectText, "ISO-8859-15", "Q")
  

encodeText

     

根据RFC 2047将RFC 822“text”令牌编码为邮件安全表单。

     

检查给定的Unicode字符串是否包含非US-ASCII字符。如果字符串仅包含US-ASCII字符,则按原样返回。如果字符串包含非US-ASCII字符,则首先使用指定的字符集进行字符编码,然后使用B或Q编码进行传输编码。然后,生成的字节将作为仅包含ASCII字符的Unicode字符串返回。

请注意,此方法应仅用于编码“非结构化”RFC 822标头。