WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

requestEncoding の設定

by WebSurfer 2011年5月22日 17:52

応答のエンコーディングを UTF-16 にする場合、MSDN ライブラリの globalization 要素 (ASP.NET 設定スキーマ) に、requestEncoding 属性と responseEncoding 属性は同じにする必要があると書いてあるので、以下のように両方 UTF-16 に設定してしまうことがあるかもしれません。

<configuration>
  <system.web>
    <globalization
      requestEncoding="utf-16"
      responseEncoding="utf-16"/>
  </system.web>
</configuration>

でも、そうすると、サーバー側でポストデータが正しく取得できず、IsPostPack プロパティが true にならなかったり、Button.Click などのイベントが発生しないという問題が起こります。

原因は、以下のマイクロソフトサポートオンラインのページに詳しく書いてありますが、IE が submit するデータのエンコーディングです。

INFO: Internet Explorer Always POSTs Unicode Data as UTF-8

IE は、ページのエンコーディングが UTF-16 の場合、submit するデータは UTF-8 でエンコーディングするそうです。

データのエンコーディングが UTF-8 なのに、requestEncoding="utf-16" と設定されているため、サーバー側が UTF-16 として処置するので、データが正しく取得できないということのようです。

IE 以外のブラウザ(Firefox 3.6.17 と Chrome 11.0.696.68)でも試してみましたが、結果は同じでした。

ちなみに Shift_JIS の場合は、ページのエンコーディングが Shift_JIS ならブラウザが submit するデータのエンコーディングも Shift_JIS になるので、UTF-16 の時のような問題ないそうです(というより、requestEncoding と responseEncoding の両方を Shift_JIS としておかないとダメ)。

解決策は、globalization 要素の requestEncoding="utf-16" を削除(デフォルトで UTF-8 になる)することです。

または、特定のページだげ応答のエンコーディングを UTF-16 にしたいのであれば、そのページのページディレクティブで ResponseEncoding="UTF-16" と設定し、その他はすべてデフォルトのまま(globalization 要素は指定しない)とすればよさそうです。

Tags:

ASP.NET

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2024年3月  >>
252627282912
3456789
10111213141516
17181920212223
24252627282930
31123456

View posts in large calendar