5

Web アプリケーションの文字エンコードに問題があります。ユーザー入力でデータベースを照会するポップアップがあります (名前で人を検索します)。問題は、アクセント付きの文字が のような奇妙な文字に変換されていることó => óです。これはかなり標準的な問題ですが、何が起こっているのかわかりません。

私が何をした?

主に、これに従ってください。

  • 私のTomcatの最初のフィルターでの設定(request&response).setCharacterEncoding("UTF-8");
  • 文字エンコーディングパラメータごとweb.xmlに設定します。server.xml<?xml version='1.0' encoding='utf-8'?>
  • コネクタで URIEncoding を UTF-8 に変更します。firebug を使用するtext/html; utf-8と、get 投稿で content-type が設定されていることがわかります (主に問題のある投稿です)。
  • jsp のメタ タイプと @page を UTF-8 に変更します。

しかし、サーバーからクライアントに送信されたアクセント付きの文字が正しく表示されるなど、いくつかは解決されていますが、まだ同じ問題があります。

apache2.2 と tomcat 6 がインストールされています。

他に何をすべきか、またどの関連情報をここに投稿すればよいかわかりません (何か必要な場合は教えてください)...

前もって感謝します。

4

3 に答える 3

9

エンコードがデータベースおよび JDBC ドライバーのレベルでも正しく設定されていることを確認してください。その方法は、DB および JDBC ドライバーのメーカー/バージョンによって異なります。詳細については、DB および JDBC ドライバー固有のドキュメントを参照してください。たとえば、MySQL JDBC ドライバーの場合、2 つの特定のパラメーターを JDBC 接続 URL に追加する必要があります。

ちなみに、XML ファイルのエンコーディングとメタ タグを設定しても、HTTP リクエスト/レスポンスのエンコーディングには影響しません。JSP/サーブレット ベースの Web アプリケーションでは、最低限次の設定のみを行う必要があります。

  • HTTP GET 要求の場合は、サーバー レベルで構成します。Tomcat では、 Tomcat の にのURIEncoding属性を設定することでこれを行います。<Connector>server.xml

  • HTTP POST リクエストの場合、ServletRequest#setCharacterEncoding().

  • JSP によって生成された HTTP 応答の場合は、JSP ごとにpageEncoding属性を設定するか、アプリケーション全体でエントリを設定することをお勧めします。<%@page%><page-encoding>web.xml

  • サーブレットによって生成された HTTP 応答 (JSP が関与していない場合) には、 を使用しますServletResponse#setCharacterEncoding()

  • 最後になりましたが、ソース コード ファイルも UTF-8 として保存されていることを確認してください。正確な構成は、使用するエディターによって異なります。Eclipse の場合、 Window > Properties > General > Workspace > Text File Encodingで制御できます。

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

于 2012-07-09T19:07:16.950 に答える
6

のdebianユーザー向けのJavaオプションで

/etc/default/tomcat7

私はこれを置きます

set JAVA_OPTS=-Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8

その後、すべてのエンコーディングはデフォルトで UTF-8 として表示されるようです..

私にとっては、これで問題が解決しました。

于 2014-01-08T20:57:22.963 に答える
4

最後に私にとってこの記事は役に立ちました

私の要約:

server.xml のコネクタに「URIEncoding="UTF-8"属性を追加します。

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

次に、文字エンコーディング用のサーバー側フィルターを追加します。spring を使用する tomcatの場合、以下の行を web.xml に追加します。

<filter>
    <filter-name>charsetFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>charsetFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
于 2014-03-31T09:16:33.403 に答える