dojo.io.bindで送信した日本語文字列が化ける

同じ罠にはまったのでメモ。

dojo.io.bindに日本語文字列をコンテンツとして渡し、サーブレット側でgetParameterで取った時に&#XXXXX; 形式で表示されて困りますというお話。

ちゃんとGETで来てることを確認。

でも日本語を入力すると

につじ

とかになる。えっと、、なんでだっけ?

(from id:nitsuji:20060712:1152699982)

どうもdojo.io.bindは送信する文字列のエンコードをISO-8859-1に仮定しているらしく、UTF-8で文字列を送ろうとすると1byteずつ区切って実体参照に置き換えてしまうようです。
(ソースを読んでも何やってるかよくわからなかったので適当ですが。デバッガで追いづらい環境は面倒だなぁ【言い訳】)

結論として明示的にエンコードを指定してやればOKのようです。

var bindArgs =
{
  "url" : url,
  "encoding" : "UTF-8",
  "mimetype" : "application/xml",            
  "load" : function(type,data,xhr){instance.XXX(type,data,xhr)}
};
var canBind = dojo.io.bind(bindArgs);