13

このWebアプリケーションをJBossでJBossApplicationServerで実行しています。フレンドリURLにサーブレットを使用しています。JSPとサーブレットを介して検索パラメータを送信しています。テキストボックス付きのフォーム、サーブレットを使用しています

最初のサーブレットはrequest.getParameter()テキストを取得するために使用し、それを別のサーブレットに送信しresponse.sendRedirectます(URLを「わかりやすい」ものにマスクします)。この最後のサーブレットはrequest.getRequestDispatcher().forward()、「醜い」方法でパラメータをJSPに送信するために使用しますsearchResults.jsp?searchParameters=Parameters

これで、[検索結果]ページが表示されると、URLに「わかりやすいURL」を含む正しい検索語が表示されます。例:次http://site.com/search/My-Search-Queryのような特殊文字を使用する場合でも:http://site.com/search/Busqué-tildes-y-eñies。しかし、JSPでその検索語を使用しようとすると、特殊文字が正しく表示されません。

システム全体でi18nを使用しており、これまでのところ特殊文字に問題はありません。ただし、情報がフォームを介して送信される場合(たとえば、index.jspからsearchResults.jspに)、特殊文字は正しく表示されません。

á - á
é - é
í - Ã
ó - ó
ú - ú
ñ - ñ

コードベース全体がUTF-8であると想定されていますが、パラメーターを渡すときに何かが欠落しているようです。私が言ったように、それらはURLに正しく表示されますが、JSP内には表示されません。

それらを手動で変換することを考えáていましたが、正しいエンコーディングを使用して、正しく変換するためのより良い方法があると思います。その上、私が今気づいていないかもしれない新しいキャラクターが後であるかもしれません(フランス語、スペイン語など)

念のため、各JSPに次の行があることをお知らせします。

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

編集

回答ありがとうございます。私はいくつかのことを試しましたが、何も問題を解決していません。

これが私がしたことです:

  • セッションの文字エンコードをUTF-8に設定するServletRequestListenerと、同じことを行うすべてのHttpリクエストのフィルターを追加しました。

  • 私が言ったように、JSPのすべてはUTF-8でエンコードされています(問題のヘッダーを参照)。

  • サーブレットの文字エンコードをコンソールに出力しましたが、デフォルトではnullであり、@kgiannakakisや@sauaが言ったようにUTF-8に設定しました。

これらのアクションのいずれも問題を修正しません。これに何か問題があるのだろうか...

4

10 に答える 10

7

勝手な推測です。JSP/サーブレット内でこれを試してください:

if(request.getCharacterEncoding() == null) {
   request.setCharacterEncoding("UTF-8");
}

正しいエンコーディングがサーブレットに渡されていることを確認する必要があります。

于 2008-12-17T14:08:35.667 に答える
6

response.setCharacterEncoding("UTF-8");

于 2010-09-20T08:31:46.143 に答える
4

問題は、ブラウザから送信される情報が明確に定義されたエンコーディングを持たず、HTTP でそれを指定する方法がないことです。

幸いなことに、ほとんどのブラウザーは、フォームを含むページのエンコーディングを使用します。したがって、すべてのページで UTF-8 を使用すると、ほとんどのブラウザはすべてのデータを UTF-8 エンコーディングで送信します (例では、まさにそれが送信方法であることを示しています)。

残念ながら、最も一般的な Java アプリケーション サーバーは、実際にはこのケースを処理しません (それらを責めることはできませんが、いずれにせよほとんど当て推量です)。

を呼び出して、入力を UTF-8 として扱うようにアプリケーション サーバーに指示できます。

request.setCharacterEncoding("UTF-8");

コーディング スタイルと使用するフレームワークによっては、制御フローがコードに到達するまでに時間がかかる場合があるため、javax.servlet.Filter.

于 2008-12-17T14:15:32.597 に答える
3

同様の問題がありました。すべての JSP を UTF-8 BOM で保存すると解決しました。

于 2009-01-12T23:14:18.023 に答える
3

Tomcat 構成のコネクタ設定を確認してください。URI を UTF-8 として扱うように設定できるオプション (URIEncoding) があります。デフォルトでは、ISO-8859-1 として扱われます。

于 2008-12-18T11:17:27.930 に答える
1

RequestDumperを使用していますか?deploy / jboss-web.deployer / server.xmlで設定されている場合は、それを削除してから、エンコーディングをテストしてください。

于 2009-07-15T07:57:33.087 に答える
1

まず、Java と JSP についてあまり知らないので、これを解決する方法がわかりません。

そうは言っても、テーブルの右側の文字は左側のUTF-8エンコーディングです。つまり、コードのどこかで、バイトを Latin-1 (またはデフォルトのエンコーディングが何であれ) として解釈し、実際には UTF-8 でエンコードされた文字を表しています...

于 2008-12-17T14:02:18.207 に答える
1

問題は、ブラウザがフォーム投稿を utf-8 に指定していないことだと思います。Web 上のフォーム ポストとエンコーディングについては、読むべきことがたくさんあります。複数の Web フレームワークが、この問題を「修正」する文字エンコーディング フィルタを提供しています。おそらく、あなたの修正のアイデアと同じように、http://static.springframework を参照してください。 org/spring/docs/2.5.x/api/org/springframework/web/filter/CharacterEncodingFilter.html

于 2008-12-17T14:09:19.240 に答える