質問: マシンによってurlencoder.encodeの結果が違う 西巻と申します。よろしくお願いします。 javaservletの開発を行っているのですがソースを コンパイルし、aのマシンで実行したときと、bのマシン で実行したときで結果が異なります。 具体的にはaのマシンでの urlencoder.encode("ほげ")の結果が %82%d9%82%b0 となるのに対してbのマシンでは %3f%8f%aa%e3%3f%a1%eb となります。 原因についておわかりの方ご教授ください。 各マシンは a:solaris7 b:solaris2.6 でjdk1.2.2 jserv1.1.1 です
回答: 多分bがバグってます。 私はsolaris使いではないのですが、(同じマシンのwindows上で)同じアプレットがieとネスケでご質問の症状を起こしたことがあります(要は一方がバグってた)。どっちがどっちだったかは忘れてしまいましたが。。。 aが出力した「%82%d9%82%b0」は「ほげ」のshift-jis表現になっています。javaソース中の「ほげ」はunicodeで格納されているのでプログラム内(多分urlencoder.encode)でshift-jisに変換しているのは理解できるでしょうか。 問題のbですが、先の変換を二重にやってしまっているのではないでしょうか?つまりshift-jisである「%82%d9%82%b0」をunicodeだと思ってshift-jisに変換を試みた結果、あのような出力になっているのだと思います。状況証拠として「%3f」が2回出現しています。