字符不在html中显示

时间:2015-04-02 10:48:52

标签: java encoding character

我无法显示“velar nasal”字符(ŋ)(但我认为其他罕见字符会出现同样的问题)。

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

我尝试过很多东西: 1)尝试使用MySQL的CONVERT将检索到的字符串转换为UTF-8,因为我知道字符串作为“Latin1”存储在我的表中:

SELECT CONVERT(Name USING utf8)

而不是:

SELECT Name

这没有帮助,并且,当我在我的java代码中用有问题的单词(“Yolŋu”)保存一个字符串,然后通过其余的代码传递String时问题仍然存在(即:问题是不在于我的数据库使用的不同字符编码。

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

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

String通过传递给javascript文件的JSONObject从java传递给html:

相关的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的自动完成“源”选项对servlet进行ajax调用。

我对字符编码主题的编码很新,而且很新。

谢谢。

2 个答案:

答案 0 :(得分:0)

您应该确保以下事项:

  1. 您的JVM必须与file.encoding=UTF-8 param
  2. 一起使用
  3. 必须使用encoding=UTF-8
  4. 对包含特殊字符的mySQL表进行参数化
  5. 您的网络用户界面应使用您在编辑器中保存网页的编码指定元标记,因此UTF-8
  6. 如果问题仍然存在,请尝试改为使用HTML entities (&entity)

答案 1 :(得分:0)

首先,在Java中,String应该已经拥有正确的Unicode,因此new String(string.getBytes(...), ...)是一个黑客,有自己的麻烦。

<强> 1。数据库

如果数据库以UTF-8保存文本会很好。可以在数据库,表和列级别上设置编码。第一件事是调查 文本的存储方式。表转储(mysqldump)最不容易出错。

如果你可以使用UTF-8,那么必须在数据库引擎上设置MySQL,并为java驱动程序进行数据传输。

在每种情况下,您都可以通过填写表字段并再次读取来检查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页面保存到文件系统时,编码头将丢失。