我一直在谷歌搜索,但我没有找到任何答案我的麻烦。
我正在测试我的Java应用程序,我注意到当我创建一个带有重音字符的用户名(HTML特殊字符,如á,é,í,ó,ú)时,它没有很好地显示这些字符。
我的意思是,例如:名为Álvaro
的用户显示�lvaro
。
你知道Java中转换特殊字符的任何函数吗?
答案 0 :(得分:0)
您需要使用StringEscapeUtils.escapeHtml
转义HTML字符。
StringEscapeUtils.escapeHtml("Ávaro");
答案 1 :(得分:0)
您还可以将HTML页面编码更改为UTF-8 ...
对于在eclipse中创建的页面HTML,您可以在页面中插入此标题
<%@ page language="java"
contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
答案 2 :(得分:0)
理想情况下,您使用Content-type标头为HTML提供服务,该标头指定用于对HTML进行编码的字符集。
如果这不是一个选项,那么以可以使用任何字符集服务HTML的方式编码非ASCII字符的最简单方法是使用数字实体:'Á'
- &gt; Á
。
如果你知道你的内容已经是HTML,那么下面的代码将会使其失效,以便可以使用各种编码(包括ASCII和UTF-8)来提供它。
public static String escapeHTML(String htmlTextNodeValue) {
int n = htmlTextNodeValue.length();
int encoded = 0;
StringBuilder out = null;
for (int i = 0, charCount; i < n; i += charCount) {
int codePoint = htmlTextNodeValue.codePointAt(i);
charCount = Character.charCount(codePoint);
if (codePoint > 0x7f
|| codePoint == '<' || codePoint == '>' || codePoint == '&'
|| codePoint == '"' || codePoint == '\'') {
if (out = null) { out = new StringBuilder(n + 1024); }
out.append(htmlTextNodeValue, encoded, i));
encoded = i + charCount;
switch (codePoint) {
case '<': out.append("<"); break;
case '>': out.append(">"); break;
case '&': out.append("&"); break;
default: out.append("&#").append(codePoint).append(';');
}
}
}
if (out != null) {
return out.append(htmlTextNodeValue, encoded, n).toString();
} else {
return htmlTextNodeValue;
}
}