1
私は立ち往生しています。私の問題は:私は、mysqlにロシアのテキストデータを送信すると、????のように保存します。私はさまざまな解決策を試しましたが、どれも私のために働いていませんでした。ここに私のJSPファイルがあります。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>
Aslo私はserver.xml
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
に次の行を追加しました。また、私は私はあなたがuseUnicode=true
が欠けていると思うweb.xml
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
テーブルフィールドのエンコード方法はどのように定義されていますか? –
私のテーブルもUTF-8です。 – funafuna
だから、すべてがうまくいくように思えます(データベーステーブルを実際にチェックしました。テーブルがUTF8として定義されているだけでなく、utf8mb4_general_ciである必要があります)。私の他の提案は、あなたのプロジェクトファイル(.java、.jsp、web.xmlなど)のエンコードをチェックすることですが、それがUTF8でもない場合は問題になる可能性があります。あなたのファイルをチェックするには、メモ帳++を使うことをお勧めします。 –