7

Set request character encoding of JSF input submit values to UTF-8 in GlassFishと同じ問題があり、送信された値はMojibakeとして到着します。ただし、回答は GlassFish を対象としており、JBoss AS 7 を使用しています。

UTF-8 を使用するように JDBC 接続 URL を指定しました。

jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8

そして私のJSFページの一番上に:

<?xml version='1.0' encoding='UTF-8' ?>

JBoss AS 7 で同じ問題を解決するにはどうすればよいですか? それとも、より一般的な方法ですべてのサーバーで機能するのでしょうか?

4

3 に答える 3

13

DBに保存する前に送信された値を印刷/再表示する際に問題がすでに発生しているため、リンク先の質問では、DBエンコーディングが原因から除外されています。したがって、問題は HTTP リクエストのエンコーディングにあります。

文字セットが指定された JDBC 接続 URL、

jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8

DB に送信する前に、SQL クエリの値を UTF-8 を使用してデコードするように MySQL JDBC ドライバーに指示するだけです。これはJSFの範囲を完全に超えているだけでなく、リンクされた質問と同じ問題を抱えていることに絶対に確信がある場合、これが問題の原因でもありません。

文字セットが指定された XML プロローグ、

<?xml version='1.0' encoding='UTF-8' ?>

XML ツリーを構築する前に、UTF-8 を使用して XML ソースをデコードするように XML パーサーに指示するだけです。実際に使用されている XML パーサーは、JSF ビューのビルド時に Facelets によって内部的に使用される SAX です。この部分は、HTTP 要求/応答エンコーディングとはまったく関係がないため、問題の原因である可能性はほとんどありません。

HTTP 要求エンコーディングを設定する必要がありますが、いずれも HTTP 要求エンコーディングを設定しません。あなたがリンクした質問は、Glassfishサーバーに対してそれを行う方法をすでに示しています。ただし、あなたの場合、JBoss AS サーバーを使用しています。その場合、Glassfish 固有の設定は適用されず、JBoss はそのようなものをサポートしません。ジョブを実行するには、カスタム サーブレット フィルターを導入する必要があります。例えば

@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);
    }

    // ...
}
于 2013-07-14T20:14:50.233 に答える
2

これを追加してJBOSS_HOME/standalone/configuration/standalone.xml解決しました:

<system-properties>
    <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
    <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
</system-properties>

https://developer.jboss.org/message/643825#643825から入手

于 2014-11-14T20:33:55.110 に答える