mysql - 得到??????使用 JSP 代替来自 MySQL 数据库的印地语文本

标签 mysql jsp jdbc utf-8 character-encoding

我得到了??????而不是使用 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/

相关文章:

java - 如何使用 Spring 表单标签包含 jsp 页面?

java - 断言错误 : negative time oracle 11

mysql - Cayenne "resets"主键值?

mysql:无法识别的语句类型。 (靠近WITH)

mysql - MYSQL中不同数据类型之间的比较如何快速查询

java - 无法显示 Jersey 的 JSP : MessageBodyWriter not found for media type=text/html

mysql - SQL 和 DateTime - 如何选择在特定时间段内存在的所有行?

java - foreach 中的值输入字段到 foreach 外的输入字段

java - JDBC 中的一般错误(更新数据库)

java - java程序中的oracle数据库连接