html 中未显示字符

Character not displaying in html

我在显示 "velar nasal" 字符 (ŋ) 时遇到问题(但我认为其他稀有字符也会出现同样的问题)。

我有一个 MySQL table,其中包含一个带有此字符的单词。 当我的代码检索它以显示在我的 HTML 页面中时,它显示为一个问号。

我尝试了很多方法: 1) 尝试使用 MySQL 的 CONVERT 将检索到的字符串转换为 UTF-8,因为我知道该字符串作为 "Latin1":

存储在我的 table 中
SELECT CONVERT(Name USING utf8)

而不是:

SELECT Name

这没有帮助,而且,当我在我的 java 代码中保存一个带有问题字词 ("Yolŋu") 的字符串,然后通过其余代码传递该字符串时,问题就来了仍然发生(即:问题不在于我的数据库使用的不同字符编码)。

2) 我还尝试从字节创建一个新字符串:

new String(name.getBytes("UTF-8"));

字符串从 java 传递到 html 通过 JSON 对象传递到 java 脚本文件:

相关JSON代码:

JSONArray names = new JSONArray();
        for (int iD: iDs)
        {
            JSONObject namesData = new JSONObject();
            String name = NameDB.getNameName(iD);
            nameData.put("label", name);
            nameData.put("value", iD);
            names.put(nameData);
        }
        return names;

相关servlet代码:

response.setContentType("application/json");

        try (PrintWriter out = response.getWriter()) 
        {
            out.print(namesJSONArray);
        }

相关js代码:

通过 jquery ui 的自动完成 "source" 选项对 servlet 进行 ajax 调用。

我对一般编码还很陌生,对字符编码主题也很陌生。

谢谢。

以下几点您应该放心:

  1. 您的 JVM 必须使用 file.encoding=UTF-8 参数
  2. 你的mySQLtable其中包含特殊字符必须用encoding=UTF-8
  3. 参数化
  4. 您的网站 UI 应使用您在编辑器中保存网页的编码指定元标记,因此 UTF-8

如果问题仍然存在,请尝试使用 HTML entities (&entity)

首先,在 Java 中,字符串应该已经包含正确的 Unicode,所以 new String(string.getBytes(...), ...) 是一个 hack,有它自己的麻烦。

1.数据库

如果数据库以 UTF-8 格式保存文本就好了。可以在数据库、table 和列级别设置编码。第一件事是调查如何 存储文本。 table 转储 (mysqldump) 最不容易出错。

如果您可以使用 UTF-8,则必须在数据库引擎上以 MySQL 形式设置,并用于 java 驱动程序的数据传输。

在每种情况下,您都可以通过填写 table 字段并再次读取它来检查 java JDBC 中的往返行程,同时也读取现有的麻烦字段。

转储字符串的代码点。

String dump(String s) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < s.length(); ) {
        int cp = s.codePointAt(i);
        if (32 < cp && cp < 128) {
            sb.append((char) cp);
        } else {
            sb.append("U+").append(Integer.toHexString(cp));
        }
        sb.append(' ');
        i += Character.charCount(cp);
    }
    return sb.toString();
}

2。输出

这可能是错误所在。开头调用:

response.setCharacterEncoding("UTF-8");
... response.getWriter(); // Now converts java's Unicode text to UTF-8.

对于 HTML 字符集规范也是有序的。特别是HTML页面保存到文件系统时,编码头会丢失。