我得到了??????而不是使用 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。这个问题是怎么引起的,我该如何解决?
最佳答案
当您得到 ?
而不是所需的字符时,这意味着负责传输字符的信使自己知道源和目标中使用的字符编码。目标中使用的字符编码不支持的任何字符都将替换为 ?
。在将字符从数据库服务器传输到 HTTP 响应的特定情况下,这可能有 2 个原因:
JDBC 驱动程序将字符从数据库服务器传输到您的 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 的顶部来修复您的 JSP 页面编码:
<%@page pageEncoding="UTF-8" %>
另见:
与具体问题无关,您的代码中存在巨大的设计问题。 Java 代码属于 Java 类,而不属于 JSP 文件。另见 How to avoid Java code in JSP files? .
关于mysql - 得到??????使用 JSP 代替来自 MySQL 数据库的印地语文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7318757/