Java 无法将连字符转换为UTF-8
我正在读我从维基百科上得到的一些文本。 文本包含类似连字符的字符串:“澳大利亚[[2011–12 NBL赛季]]”“ 我正在尝试使用以下代码将文本转换为utf-8:Java 无法将连字符转换为UTF-8,java,utf-8,character-encoding,Java,Utf 8,Character Encoding,我正在读我从维基百科上得到的一些文本。 文本包含类似连字符的字符串:“澳大利亚[[2011–12 NBL赛季]]”“ 我正在尝试使用以下代码将文本转换为utf-8: String myStr = "Australia for the [[2011–12 NBL season]]"; new String(myStr.getBytes(), "utf-8"); 结果是: Australia for the [[2011�12 NBL season]] 问题是连字符映射不正确 以字节为单位的连字
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编码识别的连字符吗
我很乐意用一些通用代码替换其他特殊字符,但也可以使用特定的“连字符”替换代码。这是因为源代码(编辑器)可能在Windows-1252(扩展拉丁语-1)中,并且它是用另一种编码UTF-8(编译器)编译的。这两种编码必须相同,或者在源代码中使用“\u00AD”,即连字符的ASCII表示形式。问题代码点是可以用转义
\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
你可以读更多