我正在接受??????而不是使用JSP的MySQL数据库中的印地文文本。
这是我的JSP代码:
<html>
<head>
<title>display data from the table using jsp</title>
</head>
<body>
<h2>Data from the table 'stu_info' of database 'student'</h2>
<%
try {
String connectionURL = "jdbc:mysql://localhost:3306/student";
Connection connection = null;
Statement statement = null;
ResultSet rs = null;
Class.forName("com.mysql.jdbc.Driver").newInstance();
connection = DriverManager.getConnection(connectionURL, "root", "root");
statement = connection.createStatement();
String QueryString = "SELECT * from stu_info";
rs = statement.executeQuery(QueryString);
%>
<TABLE cellpadding="15" border="1" style="background-color: #ffffcc;">
<%
while (rs.next()) {
%>
<TR>
<TD><%=rs.getInt(1)%></TD>
<TD><%=rs.getString(2)%></TD>
<TD><%=rs.getString(3)%></TD>
<TD><%=rs.getString(4)%></TD>
</TR>
<% } %>
<%
// close all the connections.
rs.close();
statement.close();
connection.close();
} catch (Exception ex) {
%>
</font>
<font size="+3" color="red"></b>
<%
out.println("Unable to connect to database.");
}
%>
</TABLE><TABLE>
<TR>
<TD><FORM ACTION="welcome_to_database_query.jsp" method="get" >
<button type="submit"><-- back</button></TD>
</TR>
</TABLE>
</font>
</body>
</html>
正确显示三列英文文本。对于印地语专栏,我使用了整理utf-general_ci
,但是当我打印rs.getString(4)
时,它会给我???????
。我的浏览器也支持UTF-8。这个问题是怎么造成的,怎么解决?
答案 0 :(得分:1)
当你得到?
而不是所需的字符时,那意味着负责传输字符的信使本身就知道在源和目的地都使用的字符编码。目标中使用的字符编码不支持的任何字符都将替换为?
。在您将字符从数据库服务器传输到HTTP响应的特定情况下,这可能有两个原因:
JDBC驱动程序从DB服务器到Java代码的字符传输不使用支持这些字符的字符编码。
JSP / Servlet API将Java代码中的字符传输到HTTP响应主体不使用支持这些字符的字符编码。
在您的特定情况下,您似乎有两个问题。我没有在JDBC连接URL中看到字符编码,也没有看到JSP页面编码被设置。
修复MySQL JDBC连接URL:
String connectionURL = "jdbc:mysql://localhost:3306/student?useUnicode=yes&characterEncoding=UTF-8";
通过将以下行添加到JSP的 top 来修复JSP页面编码:
<%@page pageEncoding="UTF-8" %>
无关,您的代码中存在巨大的设计问题。 Java代码属于Java类,而不属于JSP文件。另请参阅How to avoid Java code in JSP files?。