0

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

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

你知道Java中有什么函数可以转换特殊字符吗?

4

3 回答 3

0

理想情况下,您使用 Content-type 标头为您的 HTML 提供服务,该标头指定用于编码 HTML 的字符集。

如果这不是一个选项,那么以可以使用任何字符集服务器 HTML 的方式对非 ASCII 字符进行编码的最简单方法是使用数字实体:'Á'-> Á

如果您知道您的内容已经是 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;
  }
}
于 2013-05-17T12:45:04.020 回答
0

您需要使用StringEscapeUtils.escapeHtml.

 StringEscapeUtils.escapeHtml("Ávaro");
于 2013-05-17T11:47:09.587 回答
0

您还可以将 HTML 页面编码更改为 UTF-8...

对于在 Eclipse 中创建的页面 HTML,您在页面中插入此标题

<%@ page language="java"
contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
于 2013-05-17T11:54:21.813 回答