2

最近、 How to internationalize a Java web application? に基づいて国際化を実装しました。.

しかし今、いくつかのページで問題に直面しています。英語の場合はうまく表示されますが、他の言語を選択すると、そのページのすべての値が として表示され?????????ます。

画像

サーバー ログで例外を確認しましたが、誰も見つかりませんでした。

これはどのように発生し、どうすれば解決できますか?

4

2 に答える 2

5

判読??????可能な文字の代わりに (さらにはMojibakeの代わりに) 表示されることは、通常、担当するデータ転送自体がソースと宛先の両方で使用されるエンコーディングを十分に認識していることを示しています。平均的な Web アプリケーションでは、これが当てはまるのは、JDBC によって DB との間でデータが転送される時点と、response.getWriter()(JSP によって暗黙的に使用される) によってデータが HTTP 応答に転送される時点の 2 つの場所だけです。 .

プロパティファイルを使用した特定のケースでは、DB の手段がないため、HTTP 応答が主な容疑者のままです。この問題は、HTTP 応答に書き込まれる文字を UTF-8 を使用してデコードするようにサーバーが指示されていない場合に発生する可能性があります。代わりに、プラットフォームのデフォルトのエンコーディング (最も一般的な ISO-8859-1) を使用します。このようにして、ソース内の ISO-8859-1でカバーされていない文字は疑問符に変わります。ISO-8859-1 はラテン文字専用であるため、中国語、日本語、アラビア語、キリル文字、ヘブライ語、サンスクリット語など、すべての非ラテン文字に影響します。それらはすべて疑問符として書かれます。

これは、JSP の一番上に以下を追加することで、JSP ごとに修正できます。

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

(これをすべての JSP とインクルード ファイルに入れる必要があることに注意してください!)

または、次のエントリを webapp's に追加して、アプリケーション全体で修正することをお勧めしますweb.xml

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

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

于 2012-10-30T12:46:05.173 に答える
0

実際、応答がディスパッチされる前に、サーブレットで 1 行が欠落しています。

つまり、コンテンツ タイプを設定するのを忘れています。

サーブレットに含めるコードは次のとおりです

response.setContentType("text/html;charset=UTF-8");

ありがとう

于 2012-11-01T15:10:12.287 に答える