Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法将连字符转换为UTF-8_Java_Utf 8_Character Encoding - Fatal编程技术网

Java 无法将连字符转换为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]] 问题是连字符映射不正确 以字节为单位的连字

我正在读我从维基百科上得到的一些文本。 文本包含类似连字符的字符串:“澳大利亚[[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]]
问题是连字符映射不正确

以字节为单位的连字符值为[-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
你可以读更多