Java getBytes UTF-8编码

时间:2015-01-07 21:03:33

标签: java

我正在尝试处理编码问题(我想将字符串中的特殊字符转换为正确的UTF-8字符...):

当我执行这个简单的代码时:

System.out.println(new String("é".getBytes("UTF-8"), "UTF-8"));

在控制台中我期待:'é'但我得到了

é 

2 个答案:

答案 0 :(得分:7)

éé字符的HTML实体引用,而不是UTF-8编码的字符串。要对其进行解码,您可以使用Commons Lang的org.apache.commons.lang.StringEscapeUtils

String decodedStr = StringEscapeUtils.unescapeHtml("é");

答案 1 :(得分:1)

Java Strings对SGML / XML / HTML5实体一无所知。 é就是这样一个实体。它适用于HTML中的Web浏览器,因为在其中一个DTD或HTML5规范中,通过将其映射到相应的unicode字符实体&eacute来定义é是带有重音的字母e。 / p>

new String(someString.getBytes("UTF-8"), "UTF-8");是一个毫无意义的操作,它将String转换为字节,其编码可以表示所有有意义的字符,并将其转换回String。这与直接使用someString相同,只是你有一个新对象。

为了获得带重音的e,您可以执行以下操作之一:

  • 直接输入,例如System.out.println("é");。这要求您的文本编辑器和Java编译器就源代码文件的编码达成一致。如果您在项目中工作,则需要每个人都理解并同意特定的编码。这些天推荐的编码肯定是UTF-8。
  • 使用Unicode字符编号。在急性病例中,它将是\u00e9

P.S。:SGML / XML / HTML5实体与UTF-8无关。