2

ウムラウトを含むことができる JSP ページのテキスト入力フィールドから入力を取得しています。(例: Ä,Ö,Ü,ä,ö,ü,ß)。

入力の処理は、非ウムラウトに対して正常に機能します。しかし、ウムラウトが入力フィールドに入力されるたびに、間違った値が渡されます。

例えば:

  • 入力欄に「ä」(UTF-8:U+00E4)が入力された場合、
  • 引数から抽出される文字列は"ä" (UTF-8: U+00C3 および U+00A4) です。

UTF-8 16 進エンコーディング ("ä" の場合は c3 a4) が変換に使用されるように思えます。

正しい値を取得するにはどうすればよいですか?


現在の実装のスニペットを次に示します。

JSP ページは、入力値「pk」を処理ロジックに渡します。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...
<input type="text" name="<%=pk.toString()%>" value="<%=value%>" size="70"/>
<button type="submit" title="Edit" value='Save' onclick="action.value='doSave';pk.value='<%=pk.toString()%>'"><img src="icons/run.png"/>Save</button>

値は args から取得され、文字列に変換されます。

UUID pk = UUID.fromString(args.get("pk")); //$NON-NLS-1$
String value = args.get(pk.toString());

注: データベースに保存されているウムラウトは、ページに正しく表示されます。

4

1 に答える 1

5

注: データベースに保存されているウムラウトは、ページに正しく表示されます。

この事実から<%@page pageEncoding="UTF-8"%>、JSP またはのいずれかによって<jsp-config>、応答エンコーディングを既に適切に UTF-8 に設定していると仮定しますweb.xml

リクエストのエンコーディングを置き去りにしました。GET または POST を使用している場合、質問もコードも明確ではありませんでした。POST を使用している場合は、HTTP リクエスト本文のエンコーディングを明示的に設定するサーブレット フィルターを作成する必要があります。

request.setCharacterEncoding("UTF-8");

または、GET を使用している場合は、サーバー構成を掘り下げて、URI/パラメーターのエンコーディングを UTF-8 に設定する必要があります。それを行う方法は、使用するサーバーによって異なります。これは、質問履歴からはもちろん、質問からも明らかではありません。したがって、Tomcat の例を示します。Tomcat の要素のURIEncoding属性を設定します。<Connector>/conf/server.xml

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

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

于 2012-11-08T11:17:48.207 に答える