JSP编码问题

时间:2017-01-17 12:45:49

标签: java mysql jsp encoding

我被卡住了。我的问题是:当我发送俄语文本数据到mysql时,它保存就像????。我尝试了很多不同的解决方案,但没有一个能为我解决。这是我的jsp文件。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
    <%@page import="java.sql.*" %>
    <%@page import="com.mysql.jdbc.PreparedStatement" %>
    <%@page import="com.mysql.jdbc.Connection" %>
    <%@ page import="java.util.Enumeration" %>
    <%@ page import="java.io.PrintWriter" %>

<fmt:requestEncoding value="UTF-8" />
<%request.setCharacterEncoding("UTF-8");response.setContentType ("text/html; charset=UTF-8");   %>


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi">
<head>
    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP</title>
</head>
<body>
<%@ page contentType="text/html; charset=UTF-8" %>
<%
    try {
        response.setContentType ("text/html; charset=UTF-8");
        request.setCharacterEncoding ("UTF-8");
        response.setCharacterEncoding("UTF-8");
        Connection con, conn;
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }


        conn = (Connection) DriverManager.getConnection("jdbc:mysql:localhost:3306/schedule", "sch", "sch");
        PreparedStatement zxc = (PreparedStatement) conn.prepareStatement("SET NAMES utf8");

        //zx.setString(1, login);
        zxc.execute();
        zxc.close();
        String dat = request.getParameter("btn");
        String day_num = request.getParameter("day_num" + dat.substring(dat.length()-1, dat.length()));
        String first = request.getParameter("first" + dat.substring(dat.length()-1, dat.length()));
        String second = request.getParameter("second" + dat.substring(dat.length()-1, dat.length()));
        String third = request.getParameter("third" + dat.substring(dat.length()-1, dat.length()));
        String fourth = request.getParameter("fourth" + dat.substring(dat.length()-1, dat.length()));
        String fifth = request.getParameter("fifth" + dat.substring(dat.length()-1, dat.length()));
        String sixth = request.getParameter("sixth" + dat.substring(dat.length()-1, dat.length()));
        String seventh = request.getParameter("seventh" + dat.substring(dat.length()-1, dat.length()));
        String group = dat.substring(0, dat.length()-1);
        out.println(group);



        String bad_redirectURL = "login.jsp";
        String good_redirectURL = "tables.jsp?group=" + dat.substring(0, dat.length()-2);


        con = (Connection) DriverManager.getConnection("jdbc:mysql:localhost:3306/schedule", "user_creator", "user_creator");

        Statement rs = con.createStatement();
        rs.executeQuery("SET NAMES 'UTF8'");
        rs.close();


        String query = "UPDATE " + group +" SET first = ?, second = ?, third = ?, fourth = ?, fifth = ?, sixth = ?, seventh = ? WHERE day_num = ?;";




        PreparedStatement ps = (PreparedStatement) con.prepareStatement(query);




        ps.setString(1, first);
        ps.setString(2, second);
        ps.setString(3, third);
        ps.setString(4, fourth);
        ps.setString(5, fifth);
        ps.setString(6, sixth);
        ps.setString(7, seventh);
        ps.setString(8, day_num);
        out.println(ps.toString());



        ps.execute();

        response.sendRedirect(good_redirectURL);



    } catch (NullPointerException | SQLException e) {
        e.printStackTrace();
    }
%>
</body>
</html>

我已将此行添加到server.xml

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>

此外,我已将其添加到web.xml

<jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <page-encoding>UTF-8</page-encoding>
        </jsp-property-group>
    </jsp-config>

1 个答案:

答案 0 :(得分:0)

我认为你遗失了def jump[A, B](a: A, b: B)(implicit i: Implicit[A, B]) : Boolean = test(a, b)

Trouble with utf8 characters; what I see is not what I stored中了解“问号”它说这些是可能的原因:

  • 要存储的字节不编码为utf8 / utf8mb4。解决这个问题。
  • 数据库中的列是CHARACTER SET utf8(或utf8mb4)。解决这个问题。
  • 另外,检查读取时的连接是否为UTF-8。

如果仍有问题,请使用该链接中的故障排除提示,看看是否有成对的十六进制字节useUnicode=true。在utf8中,西里尔字母的第一个字节是D0到D4。如果你没有看到,请回来进一步讨论。