首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将Hyphen转换为UTF-8

无法将Hyphen转换为UTF-8
EN

Stack Overflow用户
提问于 2014-02-10 15:29:34
回答 2查看 6.8K关注 0票数 4

我在看维基百科上的一些短信。文本中包含类似于以下字符串的连字符:“澳大利亚用于[2011-12 NBL季节]”

我试图使用以下代码将文本转换为utf-8:

代码语言:javascript
复制
String myStr = "Australia for the [[2011–12 NBL season]]";
new String(myStr.getBytes(), "utf-8");

结果是:

代码语言:javascript
复制
Australia for the [[2011�12 NBL season]]

问题是连字符没有被正确地映射。

以字节为单位的连字符值为-106

您知道如何将其转换为utf-8编码识别的连字符吗?

我很乐意用一些通用代码来替换其他特殊字符,但也会有特定的“连字符”替换代码会有所帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-10 16:37:33

问题代码点是U+2013 EN DASH,它可以用转义\u2013表示。

尝试将字符串替换为"2011\u201312“。如果这样做有效,则编辑器字符编码与编译器使用的字符编码之间存在不匹配。

否则,问题在于将代码从字符串转换到正在写入的任何设备。当使用错误的编码时,从字节转换到字符或字符到字节的任何地方都是潜在的损坏点;这可能包括System.out

注意: Java字符串总是UTF-16。

代码语言:javascript
复制
new String(myStr.getBytes(), "utf-8");

此代码接受UTF-16,将其转换为平台编码,这可能是任何内容,然后伪装它的UTF-8并将其转换回UTF-16。充其量,平台编码是UTF-8,这是一个非操作;否则,它只会损坏数据。

这就是如何在Java中创建UTF-8:

代码语言:javascript
复制
byte[] utf8 = str.getBytes(StandardCharsets.UTF_8); // Java 7

您可以阅读更多的这里

票数 1
EN

Stack Overflow用户

发布于 2014-02-10 15:33:26

这是因为源代码(编辑器)可能在Windows1252(扩展拉丁语-1)中,并且它是用另一个编码UTF-8 (编译器)编译的。这两个编码必须相同,或者在源中使用:"\u00AD",这是连字符的ASCII表示形式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21681245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档