我在看维基百科上的一些短信。文本中包含类似于以下字符串的连字符:“澳大利亚用于[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编码识别的连字符吗?
我很乐意用一些通用代码来替换其他特殊字符,但也会有特定的“连字符”替换代码会有所帮助。
发布于 2014-02-10 16:37:33
问题代码点是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您可以阅读更多的这里。
发布于 2014-02-10 15:33:26
这是因为源代码(编辑器)可能在Windows1252(扩展拉丁语-1)中,并且它是用另一个编码UTF-8 (编译器)编译的。这两个编码必须相同,或者在源中使用:"\u00AD",这是连字符的ASCII表示形式。
https://stackoverflow.com/questions/21681245
复制相似问题