如何包括£;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"); 如果要手动编写标题,请使用

如何在通过java mail发送的电子邮件的主题行中包含英镑符号


当我发送它时,它显示不正确。

将您的编码设置为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);