2013-05-17 31 views
0

我一直在谷歌搜索,但我还没有找到任何答案,我的麻烦。如何转换符号(HTML中的尖锐字符首先),并保留在HTML中的锐角字符

我正在测试我的Java应用程序,我注意到当我创建带有重音字符(HTML特殊字符,如á,é,í,ó,ú)的用户名时,并没有很好地显示这些字符。 我的意思是,例如:名为Álvaro的用户显示�lvaro

你知道Java中的任何函数来转换特殊字符吗?

+0

你如何获得你写这些字符的输出流?你用HTML提供什么标题? –

回答

0

您需要使用StringEscapeUtils.escapeHtml转义HTML字符。

StringEscapeUtils.escapeHtml("Ávaro"); 
+1

也许提到它来自[Apache Commons](http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html)。 –

+0

是的,实际上我忘记提到:) –

0

你也可以改变你的HTML页面编码为UTF-8 ...

在Eclipse中创建了一个页面HTML您在页面中插入该头

<%@ page language="java" 
contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
+0

这不是JSP特有的吗?对于一个任意的HTML页面,你应该使用一个''标签,如[meta charset vs http-equiv]所述(http://stackoverflow.com/questions/4696499/meta-charset-utf-8-vs-meta- HTTP的当量含量型)的 –

0

理想情况下,用一个Content-type头来处理你的HTML,该头指定了用于编码HTML的字符集。

如果这不是一个选项,那么以这种方式编码非ASCII字符的最简单方法就是使用任何字符集来处理HTML,那就是使用数字实体:'Á' - >&#193;

如果您知道您的内容已经是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("&lt;"); break; 
     case '>': out.append("&gt;"); break; 
     case '&': out.append("&amp;"); break; 
     default: out.append("&#").append(codePoint).append(';'); 
     }    
    } 
    } 
    if (out != null) { 
    return out.append(htmlTextNodeValue, encoded, n).toString(); 
    } else { 
    return htmlTextNodeValue; 
    } 
}