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

4

我正在阅读一些从维基百科获取的文本。 这段文字中包含连字符,例如此字符串:"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编码识别的连字符吗?
我很乐意用一些通用代码替换其他特殊字符,但也需要特定的“连字符”替换代码。
2个回答

1
问题代码点是U+2013 EN DASH,可以用转义\u2013来表示。
尝试将字符串替换为"2011\u201312"。如果这样可以工作,那么您的编辑器字符编码与编译器使用的编码不匹配。
否则,问题在于从字符串到您正在编写的任何设备的转码操作。任何从字节到字符或从字符到字节的转换都可能出现损坏的潜在点,当使用错误的编码时;这可能包括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


0
这是因为源代码(编辑器)可能使用的是Windows-1252(扩展的Latin-1)编码,而编译器使用的是另一种编码UTF-8(编译器)。这两种编码必须相同,或在源代码中使用"\u00AD",即连字符的ASCII表示。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接