ASP.NET 1.1 を使用して作成した Web ページで ¥ (円記号) が表示されない


現象


ASP.NET 1.1 を使用して作成した Web ページで、応答のエンコード形式を Shift-JIS に設定した際に、クライアント ブラウザ上に ¥ (円記号) で表示されていた箇所が、? (疑問符) で表示される場合があります。



たとえば、以下のプログラム コードを使用した場合に、この現象が確認されています。



ToString("C")
DataFormatString = "{0:C}"


この現象は、.NET Framework バージョン 1.1.4322.2300 以降のバージョンで発生します。.NET Framework バージョン 1.1.4322.2300 以降のバージョンは、Microsoft Windows Server 2003 Service Pack 1 (SP1) や 2005 年以降の Microsoft ASP.NET 1.1 に含まれています。

原因


.NET Framework バージョン 1.1.4322.2300 以降では新たに以下の設定値が導入されていますが、この値の既定値が False であるため、 ¥ (円記号) が最適にエンコーディングされない事により現象が発生します。

"System.Web.Configuration.GlobalizationSection.EnableBestFitResponseEncoding" プロパティ
http://msdn.microsoft.com/ja-jp/library/system.web.configuration.globalizationsection.enablebestfitresponseencoding(v=VS.80)

.NET Framework のバージョンは、%WinDir%\Microsoft.NET\Framework\v1.1.4322\ フォルダ内の System.Web.dll ファイルのプロパティを開き、 [詳細] タブをクリックして表示される [製品バージョン] で確認できます。

解決方法


この現象を解決するには、以下のように、web.config ファイルの <globalization> 要素に、enableBestFitResponseEncoding 属性を追加し、値を true に設定してください。

<globalization 
requestEncoding="shift-jis"
responseEncoding="shift-jis"
enableBestFitResponseEncoding="true"/>