1

文字エンコーディングの問題を修正しようとしています。これは本当に良い方法ではないことはわかっていますが、現在は包帯を巻くだけであり、文字エンコーディングが新しいTo Doリストに登場したら、適切な解決策を提供します.

とにかく、現在、アクションでこれを行うことで、フランス語の文字の文字エンコーディングの問題を修正しました:

String folderName = request.getParameter(PK_FOLDER_NAME);
if (response.getCharacterEncoding().equals("ISO-8859-1") && folderName != null) {
            folderName = URLDecoder.decode(new String(folderName.getBytes("ISO-8859-1"), "UTF-8"), "UTF-8");
        }

しかし、文字列は配列ですか? どうすればいいですか?たとえば、文字列がそのままの場合:

String[] memos = request.getParameterValues(PK_MEMO);

URLDecoder を使用してどのように変換しますか?

4

2 に答える 2

2

みんなありがとう...

私が探していた答えはこれでした(これは機能します):

if (response.getCharacterEncoding().equals("ISO-8859-1") && memos != null) {
        for(int n=0; n< memos.length; n++) {
            memos[n] = URLDecoder.decode(new String(memos[n].getBytes("ISO-8859-1"), "UTF-8"), "UTF-8");
        }   
    }
于 2012-08-09T20:14:53.353 に答える
1

あなたはそれについて完全に間違った方法で行っています。

最初にリクエストパラメータを取得し(したがって、解析が開始されるため、リクエストパラメータの解析に適切なエンコーディングを設定するには遅すぎます!) 、リクエストではなく応答のエンコーディングを決定します。これは意味がありません。

最初のパラメータを取得する前に、リクエストのエンコーディングを設定するだけです。その後、リクエストパラメータを初めて解析するときに使用されます。

request.setCharacterEncoding("UTF-8");
String folderName = request.getParameter(PK_FOLDER_NAME);
String[] memos = request.getParameterValues(PK_MEMO);
// ...

通常はサーブレットフィルタを呼び出して、Webアプリケーションのすべてのサーブレットで繰り返す必要がないようにすることに注意してrequest.setCharacterEncoding("UTF-8")ください。

応答エンコーディングは通常、JSP側で、@page pageEncodingJSPごとに、または<page-encoding>アプリケーションweb.xml全体で構成されます。

包帯/回避策を導入しようとしないでください、それは事態を悪化させるだけです。最初から正しい方法でそれを行ってください。

参照:

于 2012-07-25T02:14:16.583 に答える