2015-04-02 86 views
0

我在显示“velar鼻子”字符(ŋ)时遇到了问题(但我认为其他罕见字符会出现同样的问题)。不显示在html中的字符

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

我已经尝试了一些事情:使用MySQL的转换为检索到的字符串转换为UTF-8,因为我理解的是,字符串存储在我的表作为在“latin1”试过 1):

SELECT CONVERT(Name USING utf8) 

相反的:

SELECT Name 

这并没有帮助,而且,当我在Java代码保存在一个字符串有问题的话(“Yolŋu”),然后通过代码剩下的问题传递的字符串仍然发生(即:问题不在于不同字符编码,我的数据库使用)。

2)我也尝试创建从个字节的新的String:

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

弦乐正在从Java通过传递给一个JavaScript文件一个JSONObject传递给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代码:

ajax对servlet的调用是通过jquery ui的自动完成“源”选项完成的。

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

谢谢。

回答

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页面被保存到文件系统时,编码头将会丢失。

+0

太好了。点数(2)做到了。小改正:该方法被称为“setCharacterEncoding”。 – theyuv 2015-04-03 08:47:04

+0

更正为其他访客。 – 2015-04-07 06:34:00

0

你应该保证对下面的事情:

  1. 你的JVM必须file.encoding=UTF-8 PARAM
  2. 你的MySQL表,其中包含特殊字符必须用encoding=UTF-8
  3. 您的Web UI被参数应指定工作带有编码的元标记已将网页保存在编辑器中,所以UTF-8

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