2009-09-02 11 views
2

私は本当にjavaの文字列エンコーディングによって落胆しました。 多くの自動変換があります。私は定期的に見つけることができません。 誰でも良いアイデアがありますか?例えば :JSPページで 、それはjavaで文字列エンコーディングを処理するには?

http://localhost:8080/helloworld/hello?world=凹ㄉ 

ようなリンクを持っている。そして、我々はそれを処理する必要があるので、我々はこれを行う:

String a = new String(request.getParameter("world").toString().getBytes("ISO-8859-1"), 
         "UTF-8"); 
a = "http://localhost/" + a; 

そして、私はそれをデバッグするとき、私が見つかりました。は正しい。

これをセッションオブジェクトに渡します: request.getSession()。setAttribute( "hello"、a);

後でエンコード "Big5"のjspページで、属性と表示を取得しようとしました。 文字「凹ㄉ」が壊れています。

どうすればこの問題を解決できますか?

答えて

12

これは、文字セットの変換方法ではありません。あなたはそれを文字列として取得したら、それは16ビットのUnicodeとして内部的に保存されている

request.getParameter("world").toString().getBytes("ISO-8859-1") 

:何のことを心配する必要があることは、この部分です。バイトとして取得してから、JavaにそれらのバイトをUTF-8であるかのように扱わせるように指示すると、何か良いことは起こりません。

あなたがそれが問題ないと分かった場合、それは単なる偶然のことです。そのgetParameter( "world")。toString()を呼び出すと、ユニコード文字列が得られます。さらなるデコーディングとエンコーディングは、特定の文字を壊すだけで、あなたを壊すことはありません。

質問は後でその属性を表示する方法ですか? JSPページのエンコーディングはユニコードではなく、Big5だから、その文字列を属性マップから取得してそのページに置くために何をしていますか?それが問題の起源です。パラメータを取得する際に文字変換を処理する方法についての誤解を考えると、Big5ページにもいくつかの間違いがある可能性があります。

ところで、本当にBig5を使用する必要がありますか? UTF-16は動作しますか(UTF-8でない場合)?確かにいくつかの頭痛を取り除くことができます。

+0

に動作しますええ、私は大きな-5を使用する必要があります。 – MemoryLeak

-1

次のコードは、

String a = new String(request.getParameter("world").toString().getBytes("ISO-8859-1"), 
         "UTF-16"); 
関連する問題