15

多くの試行錯誤の後、私はまだ問題を理解できません。JSP、サーブレット、およびデータベースはすべて UTF-8 エンコーディングを受け入れるように設定されていますが、em ダッシュのような 2 バイト文字を含むものに request.getParameter を使用すると、それらは壊れた文字としてスクランブルされます。

データベースに手動で送信しましたが、これらの文字を問題なく受け入れることができます。また、サーブレットでデータベースからテキストを取得し、jsp ページのフォームに出力しても問題はありません。

壊れた文字として戻ってくることがわかったのは、request.getParameter を使用して取得した後に別の場所に表示しようとしたときだけです。

他の誰かがこの問題を抱えていますか? どうすれば修正できますか?

4

4 に答える 4

24

これは、要求および/または応答のエンコーディングがまったく適切に設定されていない場合に発生する可能性があります。

GETリクエストの場合、servletcontainerレベルで設定する必要があります。どちらを使用しているかは不明ですが、たとえば、Tomcatはその要素のURIEncoding属性によって実行されます。<Connector>/conf/server.xml

<Connector ... URIEncoding="UTF-8">

POSTリクエストの場合、これらすべてのPOSTリクエストをカバーする目的のURLパターンにマップされるフィルターを作成する必要があります。例*.jspまたは/*。で次の仕事をしてくださいdoFilter()

request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);

送信されたHTMLフォーム入力値のHTML応答およびクライアント側エンコーディングの場合、JSPページエンコーディングを設定する必要があります。これをJSPの先頭に追加します(UTF-8ストレートフォームDBの表示が正常に機能することを考えると、おそらくすでに適切に実行されています)。

<%@page pageEncoding="UTF-8" %>

または、これをすべてのJSPにコピーして貼り付けないようにするには、次のコマンドで1回設定しますweb.xml

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

ソースコードファイルとstdout(IDEコンソール)の場合、IDEワークスペースのエンコーディングを設定する必要があります。どちらを使用しているかは不明ですが、たとえばEclipseの場合、[ウィンドウ]>[設定]>[一般]>[ワークスペース]>[テキストファイルエンコーディング]をUTF-8に設定して実行します。

ここに画像の説明を入力してください

ページがHTTP経由で提供される場合、HTML<meta http-equiv>タグは無視されることに注意してください。これは、ページがローカルディスクファイルシステムから。を介して開かれる場合にのみ考慮されますfile://。また<form accept-charset>、フォームでHTMLページを提供するときに使用される応答エンコーディングがデフォルトで設定されているため、指定する必要はありません。W3HTML仕様も参照してください。

参照:

于 2012-05-09T13:43:14.270 に答える
1

Tomcat FAQは、このトピックをかなりうまくカバーしています。特に: http ://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8 およびhttp://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q4

FAQに記載されているテストJSPは、基本的に、さまざまなエンコーディングの問題を修正するために数年前にTomcatを使用したときに使用したものです。

于 2012-05-09T13:53:37.077 に答える