我正在阅读从维基百科获得的一些文本。 文本包含此字符串中的连字符:“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/