Java - 检测字符串中的不同编码

标签 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));

但这并没有帮助。

最佳答案

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

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

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

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

关于Java - 检测字符串中的不同编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35011464/

相关文章:

java - 确定一个球体是否被放置在它周围的其他球体完全包围

java - 正则表达式序列差异

c++ - 如何不区分大小写(不按字典顺序)对字符串进行排序?

python - 修复混合编码的 csv 中的编码错误

php - 将编码字符转换回原始字符 - PHP

java - 在java中比较byte[i]和string

java - final static 和 static final 的区别

c - 查找字符串是否为大小写混合的最有效方法

java - 如何显示字符串数组?

python - 在非英语 Ubuntu 上编译 Cython .pyx 文件(unicode 错误)