我正在尝试处理编码问题(我想将字符串中的特殊字符转换为正确的UTF-8字符...):
当我执行这个简单的代码时:
System.out.println(new String("é".getBytes("UTF-8"), "UTF-8"));
在控制台中我期待:'é'但我得到了
é
答案 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字符实体é
来定义é
是带有重音的字母e。 / p>
new String(someString.getBytes("UTF-8"), "UTF-8");
是一个毫无意义的操作,它将String转换为字节,其编码可以表示所有有意义的字符,并将其转换回String。这与直接使用someString
相同,只是你有一个新对象。
为了获得带重音的e,您可以执行以下操作之一:
System.out.println("é");
。这要求您的文本编辑器和Java编译器就源代码文件的编码达成一致。如果您在项目中工作,则需要每个人都理解并同意特定的编码。这些天推荐的编码肯定是UTF-8。\u00e9
。P.S。:SGML / XML / HTML5实体与UTF-8无关。