Commons HttpClientでPOSTパラメータ日本語文字化け

Commons HttpClient(3.0RC3)でPOSTメソッドのパラメータの値に日本語を指定すると文字化けます。このクライアントプログラムを実行すると

PostMethod method = new PostMethod("http://localhost:8080/testweb/hoge");
//method.addRequestHeader(new Header("Content-Type","text/html; charset=Shift_JIS"));
method.addParameter("param1", "value1");
method.addParameter("param2","日本語"); 		
int result = client.executeMethod(method);

サーバー側(サーブレットなど)で受け取ったパラメータが

param2=???

になっちゃいます。


HttpClientで、何もしないと、デフォルトのISO8859-1になるし、
リクエストヘッダにコンテントタイプ(上のaddRequestHeaderの行)を指定すると、なんか内部でエンコードしてるっぽいけど、ちゃんと動かない。何か指定すれば動くのか?


関連記事
http://www.tsujita.jp/blojsom/blog/default/Java/2005/01/21/20050121.html
http://kitaj.simojimo.org/20040731.html#p03


<追記>
PostMethodを継承して、getRequestCharSet()メソッドで使いたいcharsetを返せば、とりあえずは文字化けせずに動くようだ。

import org.apache.commons.httpclient.methods.PostMethod;

public class PostMethodEx extends PostMethod{

    public PostMethodEx(String uri){
        super(uri);
    }

    public String getRequestCharSet() {
        return "Shift_JIS";
    }
}
PostMethod method = new PostMethodEx("http://localhost:8080/testweb/hoge");
...


でも正しい方法なのかどうか謎。3.0はCodecとか謎のライブラリも使っててわけわからんし、たいした用事のプログラムでもない(動けばいい)ので、あまり深みにはまりたくない。ちょっとしたツールでちょっとしたことにしか利用しないから、(もしバグだったら)いつまでも直らないのかも。


関連メソッドはこのへんぽい
org.apache.commons.httpclient.methods.PostMethod#generateRequestEntity()
org.apache.commons.httpclient.methods.EntityEnclosingMethod#getRequestCharSet()
org.apache.commons.httpclient.util.EncodingUtil#doFormUrlEncode(NameValuePair[] pairs, String charset)