我正在 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));
但这并没有帮助。
最佳答案
Java 字符串始终编码为 UTF-16。这是 Unicode,其中每个代码点(或多或少是一个字符)至少有 16 位,即 2 个字节长。
如果将字符串写入输出或从输出中读取,则需要指定编码。
大多数写入或读取方法都具有一个可选参数来指定编码。如果未指定,很可能会使用操作系统的默认编码。
当您主要编写 ASCII 字符时,输出可能看起来像有效的 UTF-8,即使它使用一些不同的编码(如 ASCII 或 CP-1252)。这可能是某些邮件提供商接受您的邮件作为有效 UTF-8 的原因
关于Java - 检测字符串中的不同编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35011464/