2016-04-23 76 views
0

所以我使用的语言是Java,使用JSP-s和Servlets我尝试给html应该打印的内容,但它只是打印问号。我的数据在MySQL中。我试图将所有内容都更改为UTF-8,包括tomcats,xml和html文档,JSP和MySQL工作台的字符编码,但没有帮助。一个重要的符号 - System.out.println(...);函数可以正确打印控制台中的文本(如预期的那样)。请帮忙。为什么浏览器显示来自MySQL数据库的问号?

+0

和浏览器也使用UTF-8? – Tom

+0

确实是 –

+0

每个字符串有一个问号?还是很多?两种不同的情况。 –

回答

1
  • 客户端中的字节必须是utf8编码的。
  • 连接必须确定这一事实。对于servelet resource.setContentType ("text/html;charset=utf-8");
  • 表格/列必须是CHARACTER SET utf8(或utf8mb4)。
  • 输出必须声明utf8。对于JSP:<%@ page contentType="text/html; charset=UTF-8" %>

对于多个问号,通常的缺陷在表定义中。或者,源字节和连接可能有问题。

要检查什么是表,请了一些非英文字符(S)提供从这个输出:

SELECT col, HEX(col) FROM ... 
+0

选择列的输出。从...十六进制(COL)是针对这些项目的1“D588D59ED5BE20D5A720D5A3D680D5A5D5AC203C3CD580D5A1D680D5A9D5A1D5A3D5B8D5B2D5AB20D5B3D5A1D5B4D683D5B8D680D5A4D5B6D5A5D680D5A83E3E3A”。我现在可以假设什么? –

+0

你提到的所有4点都是用一些小的差异完成的,recource.contentType()是否意味着response.contentType()?在MySQL工作台中也使用utf-8_general_ci。 –

+0

看起来像使用utf8编码的亚美尼亚字符。所以,数据“正确”存储。所以,需要看看输出端。如果你可以从Java获得十六进制,看看它是否看起来像'D5xx'。并查看html输出以查看它是否表示“charset = UTF-8”,可能位于开头附近的“meta”标签中。 –

相关问题