2017-01-17 20 views
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> 
+0

テーブルフィールドのエンコード方法はどのように定義されていますか? –

+0

私のテーブルもUTF-8です。 – funafuna

+0

だから、すべてがうまくいくように思えます(データベーステーブルを実際にチェックしました。テーブルがUTF8として定義されているだけでなく、utf8mb4_general_ciである必要があります)。私の他の提案は、あなたのプロジェクトファイル(.java、.jsp、web.xmlなど)のエンコードをチェックすることですが、それがUTF8でもない場合は問題になる可能性があります。あなたのファイルをチェックするには、メモ帳++を使うことをお勧めします。 –

答えて

0

にこれを追加しました。

読むTrouble with utf8 characters; what I see is not what I storedで「疑問符」に関するこれらの可能性が高い原因であると述べている:

  • 記憶されるべきバイトがUTF8/utf8mb4としてエンコードされていません。これを修正してください。
  • データベースの列は、CHARACTER SET utf8(またはutf8mb4)です。これを修正してください。
  • また、読み取り中の接続がUTF-8であることを確認してください。

問題が解決しない場合は、そのリンクのトラブルシューティングのヒントを使用して、16進数のバイトがかどうかを確認してください。 utf8では、キリル文字の最初のバイトはD0からD4です。それが見えない場合は、さらに議論のために戻ってください。