我无法显示“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调用。
我对字符编码主题的编码很新,而且很新。
谢谢。
答案 0 :(得分:0)
您应该确保以下事项:
file.encoding=UTF-8
param encoding=UTF-8
如果问题仍然存在,请尝试改为使用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页面保存到文件系统时,编码头将丢失。