YUI io を使用してサーバーにデータを投稿しています。æ ø å などの外国語の文字の送信に問題があります。
最初のケース: フォームがサーバーに投稿される
Y.io(url, {
method: 'POST',
form: {
id: 'myform',
useDisabled: true
}
});
これにより、フォームのコンテンツがサーバーにポストされます。「æøå」を含む「test1」という名前のフィールドがある場合、サーバーには REQUEST_CONTENT="test1=%C3%A6%C3%B8%C3%A5" が表示されます。これは urldecode 関数で簡単にデコードできますが、問題はありません...
2 番目のケース: データは次のように投稿されます。
Y.io(uri, {
data : '{"test1":"æøå"}'),
method : "POST"
});
これは、サーバー REQUEST_CONTENT="{"test1":"├ª├©├Ñ"}" で確認できます。どうすればそれをデコードできますか?そして、なぜそのように送信されるのですか?
encodeURIComponent() を使用して、文字列を送信する前にエンコードできることはわかっています。しかし、io リクエストは実際には Model Sync 操作の一部であるため、直接 io を呼び出していません。私はこのようなことをしています:
Y.User = Y.Base.create('user', Y.Model, [Y.ModelSync.REST], {....});
var user = new Y.User();
user.set('test1', 'æøå');
user.save();
したがって、属性を設定/読み取るたびにエンコード/デコードするのは意味がありません。
また、リクエストヘッダーに charset=utf-8 を設定しようとしましたが、何も変わりませんでした。
編集
Chrome でさらにデバッグを行ったところ、次のコード行でリクエストが作成されました。
transaction.c.send(data);
transaction.c は xmlhttprequest であり、(chrome デバッガーを使用して) データが "{"test1":"æøå"}" であることを確認できます。上記のコード行が実行されると、保留中のネットワーク エントリが表示されます (ネットワーク タブの下)。クロームデバッガー)。リクエストのペイロードは {"test1":"├ª├©├Ñ"} と表示されます。ヘッダーは次のとおりです。
Accept:application/json
Content-Type:application/json; charset=UTF-8