巨大なる虫

<< 戻る   トップ >>

サイト検索をやるとなると、当然のことながら Encoding への配慮が必要になる。ってゆーかー、日本語で検索できなくてはならない。ところが、日本語がうまくサーバに送信できない。これは「古い友人」だ。というより、すぐに気がついたから「新しい古い友人」だ。Servlet や JSP は POST メソッドで送ったデータしか Character Encoding を処理してくれないのだ。

でわ、POST 送信しているはずの処理系でどうして復号してくれないのか?懊悩することしばし、結論は「POSTメソッドで送信していない」であった。実は、いままでてっきり POST 送信していたと思っていたのだが、実は GET で送っていたのだ (この GET で送る、というとんでもなく矛盾した記述はこの筋ではやむを得ない表現である)。これまでは復号を必要とするパラメータがなかったので気がつかなかったのだ。

こりゃあ参った。王蟲クラスの巨大なる虫だ。ところで Fedora Core 6 の日本語辞書は「王蟲」を知っているぞ。俺は教えていない。誰が教えた?いや、これは脇道。とにかく目から鱗が落ちるくらいびっくり。驚愕。呆然。

殺虫にかかる。mozilla developer center のAJAX:Getting Startedによれば、「データをPOSTする必要がある場合、次の方法でrequestのMIME type を変更します:

request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

そうでなければ、サーバはPOSTされたデータを破棄します」。うわぁ、いままで破棄されてたんだ。というわけで、XMLHttpRequest オブジェクトの setRequestHeader() メソッドをコール。

ところがうまくいかない。よく考えてみれば request.open( "POST", url, true ); の前にリクエストヘッダをセットしても無意味だよな、と気がついて後からセットするように変更。うまくいった。

ちなみに、url に GET な "?foo=boo" なクエリで POSTなクエリと並列していると GET なクエリが優先されるようだ。そうなると日本語への復号はうまくいかないのだ。

すいません、今回「古い友人」とか「クエリの並列」とか身内の符丁や専門用語とかバリバリです。既にお気づきと思いますが、酔っ払いです。


作成: 2007-05-11 02:20:37.0更新: 2007-05-11 02:20:37.0
http://museo-anonimo.jp/nanban/?id=480,http://museo-anonimo.jp/nanban/tr/480