java - 无法将连字符转换为 UTF-8

标签 java utf-8 character-encoding

我正在阅读从维基百科获得的一些文本。 文本包含此字符串中的连字符:“Australia for the [[2011–12 NBL season]]”

我正在尝试将文本转换为 utf-8,使用以下代码:

String myStr = "Australia for the [[2011–12 NBL season]]";
new String(myStr.getBytes(), "utf-8");

结果是:

Australia for the [[2011�12 NBL season]]

问题是连字符没有被正确映射。

以字节为单位的连字符值是 [-106](我不知道如何处理它...)

你知道如何将它转换成utf-8编码识别的连字符吗?

我很乐意用一些通用代码替换其他特殊字符,但特定的“连字符”替换代码也会有所帮助。

最佳答案

问题代码点是U+2013 EN DASH可以用转义符 \u2013 表示。

尝试将字符串替换为“2011\u201312”。如果这有效,那么您的编辑器字符编码与 the compiler 不匹配。正在使用。

否则,问题在于从字符串到您要写入的任何设备的转码操作。当使用错误的编码时,从字节转换为字符或将字符转换为字节的任何地方都是潜在的损坏点;这可以包括 System.out


注意:Java 字符串始终为 UTF-16。

new String(myStr.getBytes(), "utf-8");

此代码采用 UTF-16,将其转换为平台编码(可以是任何形式),然后伪装为 UTF-8 并将其转换回 UTF-16。充其量,平台编码是 UTF-8,这是一个空操作;否则它只会破坏数据。

这是在 Java 中创建 UTF-8 的方式:

byte[] utf8 = str.getBytes(StandardCharsets.UTF_8); // Java 7

您可以阅读更多 here .

关于java - 无法将连字符转换为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21681245/

相关文章:

python - 将 Bytearray 编码为 UTF-8

linux - 通过 Vim 保存平面文件向创建新行的文件添加一个不可见的字节

Java:可以通过观察者层次结构向观察者通知更改吗?

Java 看不到日历 API

xml - 如何使用 XStream 框架对 UTF-8 进行编码?

PHP4 到 PHP5 迁移字符编码。 latin1 与 utf8

c++ - 有什么简单的方法可以将 ASCII 转换为 UTF8? (使用 boost::locale)

php - Mysql/Phpmyadmin 中的德语元音变音

java - 当类出现在堆栈跟踪中时在断点处停止

具有更多数据结构的 Java 库