如何转换符号(首先是HTML中的急性字符)并保持在HTML中的急性字符中

时间:2013-05-17 11:44:08

标签: java

我一直在谷歌搜索,但我没有找到任何答案我的麻烦。

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

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

3 个答案:

答案 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; &#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;
  }
}