Java - 在字符串

时间:2016-01-26 10:16:31

标签: java string encoding character-encoding

我用Java生成HTML电子邮件并通过Apache Commons Email发送。我的邮件是以UTF-8发送的,在MS Outlook和GMail中工作正常,但我与波兰电子邮件提供商Wirtualna Polska [http://wp.pl/]有争议。他们的在线电子邮件客户端抱怨"在电子邮件内容中检测到不同的编码"。我如何在java中检测字符串中的字符或单词与另一个字符串编码有何不同?

enter image description here

如果它确实重要 - HTML电子邮件中的电子邮件并嵌入了4个图像。 enter image description here

最后,当我准备好我的电子邮件时,我这样做强制使用UTF8

return org.apache.commons.codec.binary.StringUtils.newStringUtf8(mail.getBytes(StandardCharsets.UTF_8));

但它没有帮助。

1 个答案:

答案 0 :(得分:1)

Java字符串始终编码为UTF-16。这是Unicode,其中每个代码点(或多或少一个字符)至少为16位,即2字节长。

如果将String写入输出或从中读取,则需要指定编码。

大多数写入或读取方法都有一个可选参数来指定编码。如果未指定,则最有可能使用操作系统的默认编码。

当您主要编写ASCII字符时,输出可能看起来像有效的UTF-8,即使它使用一些不同的编码,如ASCII或CP-1252。这可能是一些邮件提供商接受您的邮件为有效UTF-8

的原因