如何包括£;java mail中电子邮件主题行中的磅符号
如何在通过java mail发送的电子邮件的主题行中包含英镑符号如何包括£;java mail中电子邮件主题行中的磅符号,java,encoding,jakarta-mail,Java,Encoding,Jakarta Mail,如何在通过java mail发送的电子邮件的主题行中包含英镑符号 当我发送它时,它显示不正确。将您的编码设置为UTF-8 msg.setContent(message,"text/html; charset=UTF-8"); 主题是标题。标题仅使用ascii-7,因此要正确编码非ascii-7字符,您应该使用正确的编码 如果您使用的类允许您指示一些编码,请尝试使用UTF-8 mimeMessage.setSubject(yourSubject, "UTF-8"); 如果要手动编写标题,请使用
当我发送它时,它显示不正确。将您的编码设置为UTF-8
msg.setContent(message,"text/html; charset=UTF-8");
主题是标题。标题仅使用ascii-7,因此要正确编码非ascii-7字符,您应该使用正确的编码 如果您使用的类允许您指示一些编码,请尝试使用UTF-8
mimeMessage.setSubject(yourSubject, "UTF-8");
如果要手动编写标题,请使用以下任一选项:
MimeUtility.encodeWord(yourSubject, "UTF-8", "B"); // base-64
MimeUtility.encodeWord(yourSubject, "UTF-8", "Q"); // quoted-printable
这或多或少就是MIMessage在setSubject(str,encoding)中的作用:
样本
我试过这个:
public static void main(String[] args) throws Exception {
// manual encoding
System.out.println(MimeUtility.encodeText("How to include £ pound symbol", "UTF-8", "Q"));
System.out.println(MimeUtility.encodeText("How to include £ pound symbol", "UTF-8", "B"));
// MimeMessage encoding
MimeMessage m = new MimeMessage((Session) null);
m.setSubject("How to include £ pound symbol", "UTF-8");
m.setContent("lalala", "text/plain");
m.writeTo(System.out);
}
结果是:
=?UTF-8?Q?How_to_include_=C2=A3_pound_symbol?=
=?UTF-8?B?SG93IHRvIGluY2x1ZGUgwqMgcG91bmQgc3ltYm9s?=
(……)
将消息字符集设置为UTF-8。@绅士:这是标题编码的问题,而不是内容编码的问题。这表示mime部分(主要内容)的正文编码,但与标题编码(主题所在的位置)无关。我不确定消息的实现是否也使用这种编码来正确编码标题(特别是如果它们需要自己的怪异编码),这会影响主题行吗?在问这个问题之前,我已经尝试了google之后的第一个片段,但对我来说不起作用。我没有写标题。试着做
mimeMessage.writeTo(System.out)代码>这样我们就可以看到你的主题是如何编码的(使用setSubject(str,“UTF-8”)
提案)。我很好奇…主题:=?UTF-8?Q?仅测试?=EF=BF=BD3.99?=MIME版本:1.0内容类型:文本/普通;charset=Cp1252内容传输编码:base64问题在于EF BF BD
不是磅符号UTF-8中的字节表示形式。尝试以文字字符串形式传递英镑符号(正如我所做的),您应该获得两个字节:c2a3
。从哪里提取字符串?也许是一个属性文件?如果是这样的话,你也应该注意它自己的编码@helios,EF BF BD
是0xFFFD的UTF-8编码,用于替换非法的UTF-8序列。因此,OP从中读取符号的内容看起来都不是有效的UTF-8序列。
=?UTF-8?Q?How_to_include_=C2=A3_pound_symbol?=
=?UTF-8?B?SG93IHRvIGluY2x1ZGUgwqMgcG91bmQgc3ltYm9s?=
Message-ID: <21944831.01314352473121.JavaMail.HAC001ES@SE115179>
Subject: =?UTF-8?Q?How_to_include_=C2=A3_pound_symbol?=
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
lalala
String yourEncodedString = MimeUtility.encodeText(str, "UTF-8", "Q");
mimeMessage.setHeader("Subject", yourEncodedString);