1

JSFとHibernateを介して中国語の文字列をMySQLに入力して保存しようとすると、問題が発生します。

実際、「System.out.print」を使用して、JSF入力フィールドに我(me)と入力した後、データベースに保存する前に、文字化けした単語が発生したことを検出しました。コードの一部は次のとおりです:index.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>
            <h:panelGrid columns="2">
                <h:outputText value="Input"/>
                <h:inputText value="#{showBean.input}" />
            </h:panelGrid>
            <h:commandLink action="#{showBean.show()}" value="Show"/>

        </h:form>
    </h:body>
</html>

ShowBean.java

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class showBean {
    String input;
    public showBean() {
        input = null;
    }

    public String getInput() {
        return input;
    }

    public void setInput(String input) {
        System.out.println("set input " + input);
        this.input = input;
    }

    public String show(){
        System.out.println("show input " + input);
        return "";
    }
}

コンソール出力は次のとおりです。setinput???è??è?????è??è????? 入力を表示???è??è?????è??è?????

4

2 に答える 2

0

実際に Facelets (デフォルトで UTF-8 を使用) を使用しており、PrimeFaces ajax (要求本文のエンコーディングを混乱させることが知られている) を使用していない場合、問題には 2 つの原因があります。

  1. MySQL JDBC ドライバーの文字エンコードが UTF-8 に設定されていません。これにより、DB で文字化けが発生しました。

  2. Eclipse コンソールの文字エンコードが UTF-8 に設定されていません。これにより、文字化けが発生しましたSystem.out

解決策は次のとおりです。

  1. useUnicode=yescharacterEncoding=UTF-8パラメータを JDBC 接続に追加します。JDBC URL のクエリ文字列として指定できます。

    jdbc:mysql://hostname:3306/db_name?useUnicode=yes&characterEncoding=UTF-8
    

    またはJDBCデータソースの接続プロパティとして、ユーザー名、パスワードなどを指定したのとまったく同じ方法.

  2. Window > Preferences > General > Workspace > Text File Encodingでコンソール エンコーディングとして UTF-8 を使用するように Eclipse に指示します。

    ここに画像の説明を入力

以下も参照してください。

于 2012-12-18T20:25:21.967 に答える
0

Glassfish を使用する場合は、次のコードを glassfish-web.xml に追加するだけです。

<glassfish-web-app>
   <parameter-encoding default-charset="UTF-8" />
</glassfish-web-app>
于 2014-12-09T09:15:35.753 に答える