6

私はUTF-8にすべてを持っています。これには、Content-Type、データベース、ファイル、Java、すべてが含まれます(何かを見逃していない限り)。

私は多くのstackoverflowの回答、JIRA、ブログなどをフォローしていますが、それでも失敗します。

問題自体は次のとおりです。

http://localhost:8080/app/searh?text=café私が提出するとき、デバッグするために、私のrequest.getParameter("text")ものは常に間違っていて、のようなものcaféであり、私に(?)をrequest.getCharachterEncoding()与えると仮定しましょう。null

リクエストヘッダーを見ると、次のようになりました。

GET http://localhost:8080/app/search?text=caf%C3%A9 HTTP/1.1
Host: localhost:8080
Proxy-Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.69 Safari/537.17
Referer: http://localhost:8080/app/search?text=n%C3%A3o
Accept-Encoding: gzip,deflate,sdch
Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: UTF-8,*;q=0.5
Cookie: JSESSIONID=OMMITED

そして、応答ヘッダー:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Pragma: No-cache
Cache-Control: no-cache
Expires: Wed, 31 Dec 1969 21:00:00 BRT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Content-Encoding: gzip
Vary: Accept-Encoding
Date: Tue, 19 Mar 2013 14:06:24 GMT
Proxy-Connection: keep-alive
Connection: keep-alive

それがすべてUTF-8です。分かりません。

-Dfile.encoding=UTF-8 -Dfile.io.encoding=UTF-8 -DjavaEncoding=UTF-8私は自分のstandalone.conf JAVA_OPTS変数を渡そうとしました、入れようとしました

<property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
<property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>

私のstandalone.xml。これで問題が解決するものはありません。

これを修正するために何ができますか?

前もって感謝します。

ところで:JBossAS7.1.1です。

4

4 に答える 4

3

同じ問題が発生しましたが、Jboss 5.1で、URIEncoding属性をHTTPコネクタ(jbossweb / server.xml内)に追加し、URL/GETパラメーターを手動でデコードすることで解決しました。

しかし、Jboss7でそれを定義する方法は以前のバージョンとは異なりますが、少しグーグルでこのリンク</extensions>を見つけました:基本的に、タグの終わりの後にstandalone.xmlまたはdomain.xmlファイルに次の行を追加する必要があります(この手順はすでに完了しているようです;-):

<system-properties>
     <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
     <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
</system-properties>

さらに、java.net.URIEncoderオブジェクトを使用して、URIまたはパラメーターを手動でデコードする必要があります。

String param = URLDecoder.decode(request.getParameter("text"), "UTF-8");

BalusCのブログには、それに関する興味深い投稿があります。

最後に、前のオプションの使用を避けたい場合の2番目の解決策:GETメソッドの代わりにPOSTメソッドを使用することを検討しましたか?

お役に立てば幸いです。

于 2013-03-19T15:36:13.683 に答える
2

要求と応答の両方のエンコードをUTF-8に設定するフィルターを作成する問題を解決しました。

かなりハッキーですが、動作します。

于 2013-03-19T18:58:46.727 に答える
1

Toni S. Magranerの回答にコメントを追加するほどの評判がないので、ここに書き込みます。

request.getParameter( "text")はすでにURLデコードを行っています。URLDecoder.decode()を再度呼び出すと、二重デコードが行われ、おそらく希望どおりの結果が得られません。例:

logger.error("p1:"+request.getParameter("p1"));

でそれを呼び出す

http://localhost/test?p1=ku%2fki%44__%33X%C3%A9X

プリント:

p1:ku/kiD__3XéX
于 2013-08-20T12:09:44.200 に答える
0

スタンドアロン.xmlまたはdomain.xml構成は私には機能しません。

jboss-as-7.1.1.Finalでは、この行をstandalone.confに追加するだけで、このファイルはディレクトリbinの下にあります。

JAVA_OPTS = "$ JAVA_OPTS -Dorg.apache.catalina.connector.URI_ENCODING = UTF-8"

from:JBOSS7エンコーディングが期待どおりに機能しない

于 2017-01-04T14:32:05.677 に答える