我用Java生成HTML电子邮件并通过Apache Commons Email发送。我的邮件是以UTF-8发送的,在MS Outlook和GMail中工作正常,但我与波兰电子邮件提供商Wirtualna Polska [http://wp.pl/]有争议。他们的在线电子邮件客户端抱怨"在电子邮件内容中检测到不同的编码"。我如何在java中检测字符串中的字符或单词与另一个字符串编码有何不同?
如果它确实重要 - HTML电子邮件中的电子邮件并嵌入了4个图像。
最后,当我准备好我的电子邮件时,我这样做强制使用UTF8 :
return org.apache.commons.codec.binary.StringUtils.newStringUtf8(mail.getBytes(StandardCharsets.UTF_8));
但它没有帮助。
答案 0 :(得分:1)
Java字符串始终编码为UTF-16。这是Unicode,其中每个代码点(或多或少一个字符)至少为16位,即2字节长。
如果将String写入输出或从中读取,则需要指定编码。
大多数写入或读取方法都有一个可选参数来指定编码。如果未指定,则最有可能使用操作系统的默认编码。
当您主要编写ASCII字符时,输出可能看起来像有效的UTF-8,即使它使用一些不同的编码,如ASCII或CP-1252。这可能是一些邮件提供商接受您的邮件为有效UTF-8
的原因