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 调用。
我对一般编码还很陌生,对字符编码主题也很陌生。
谢谢。
以下几点您应该放心:
- 您的 JVM 必须使用
file.encoding=UTF-8
参数
- 你的mySQLtable其中包含特殊字符必须用
encoding=UTF-8
参数化
- 您的网站 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页面保存到文件系统时,编码头会丢失。
我在显示 "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 调用。
我对一般编码还很陌生,对字符编码主题也很陌生。
谢谢。
以下几点您应该放心:
- 您的 JVM 必须使用
file.encoding=UTF-8
参数 - 你的mySQLtable其中包含特殊字符必须用
encoding=UTF-8
参数化
- 您的网站 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页面保存到文件系统时,编码头会丢失。