web-dev-qa-db-ja.com

UTF-8URLデコード/エンコード

次のようなAjaxリクエストを送信するようにURLに指示します。

url += '/' + something + '/' + id;
var response;
$.ajax({
    async : false,
    type: 'DELETE',
    url: url,
 ...

私のremoveIdは、UTF-8文字を含む変数です。その変数をJava側で次のように処理します:

@RequestMapping(value = "/something/{id}", method = RequestMethod.DELETE)
    public void myMethod(HttpServletResponse response, @PathVariable String id) {
    ...

ただし、Java側のid変数は、UTF-8文字が奇妙なものに変わるため、元の変数とは異なります。

JavaScript側からUTF-8文字を送信し、それをJava側(RESTを使用したSpring 3、WebサーバーはTomcat 7)で再度変換するにはどうすればよいですか?

PS 1:encodeUriComponentを使用していなくても、URLが単独でエンコードされているようです。

PS 2:質問をより明確にするために:

i.e. my id variable is araç and sent URL is: localhost:8080/sdfasf/ara%C3%A7 

Id変数がその値を持っているのを見ると:

araç

の代わりに:

ara%C3%A7 

Spring(またはTomcat)は自動的にそれを行いますか?コントローラーをパス変数として自動的にデコードする方法はありますか(つまり、次のように何も記述せずに)

URLDecoder.decode(id,"UTF-8");

自動的に変換されます)

14
kamaci

表示されるid値は、utf-8の代わりにiso-8859-1文字セットを使用してデコードされているようです。 URLのパス部分のエンコーディングはJava EEで指定されておらず、それを設定するための標準APIはありません。クエリパラメータには request.setCharacterEncoding を使用できます。パラメータにアクセスして正しくデコードする前に。CharacterEncodingFilterはまさにそれを実行しますが、パスパラメータには影響しません。

Tomcatでこれを機能させるには、server.xmlURIEncoding要素のConnector属性を「utf-8」に設定する必要があります。

Java webappでの文字エンコードについて知りたいと思ったことは、同様の質問に対する この優れた回答 にあります。

16
Jörn Horstmann

私はここで答えを見つけました: http://forum.springsource.org/showthread.php?14063-How-to-set-setCharacterEncoding-on-Request

私はSpring側でその構成を行いました:

<filter>
    <filter-name>SetCharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>SetCharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

uTF-8では問題なく動作します。

3
kamaci

JavaScriptを埋め込んでいるページでページエンコーディングを設定してみましたか?

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
1
Udo Held

開始<head>タグのすぐ下にこれを追加して、ページエンコーディングがUTF-8に設定されていることを確認します。

<meta charset="utf-8">

また、JavaScriptファイルがUTF-8エンコーディングで保存されていることを確認してください。テキストエディタの設定を確認してください。

1
Mathias Bynens

JavaScriptの使用:

data=encodeURIComponent(data);

データをエンコードするために、そしてJavaであなたはすることができます:

data=Java.net.URLDecoder.decode(data);
0
Akhil Thayyil