小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


クラシックASPで画面に出力する文字コードを一時的に変更する方法

クラシックASPにおいて、クライアントに出力する際の文字コードは、@codepageディレクティブで指定したコードページに従います。@codepageディレクティブを指定していない場合は、サーバの既定コード*1で出力されます。ただし、Session.Codepageプロパティを利用することで、クライアントに出力する際の文字コードを変更することができます。

UTF-8でクライアントに出力する

以下の例では、"あ"という文字列は、UTF-8でブラウザに出力されます。

Session.CodePage = 650001
Response.Write "あ"
一時的にクライアントに出力する際の文字コードを変更する

たとえば、通常はUTF-8で出力するが、CSVファイルのダウロード時だけは、Shift_JISで出力したいということがあります。(エクセルでは、UTF-8のCSVファイルを開けないため。)
このような場合には、Session.Codepageプロパティを利用して、一時的に文字コードを変更することで対処します。

oldcodepage = Session.Codepage ' 現在のコードページを退避
Session.Codepage = 0 ' コードページを既定値に戻す

' CSVファイルのダウンロード
Response.ContentType="application/octet-stream"
Response.AddHeader "Content-Disposition","attachment; filename=hoge.csv"
Response.Write "あ"

Session.Codepage = oldcodepage ' コードページを元に戻す
Response.End

Session.Codepage = 0の部分は、Session.Codepage = 932と書いてもOKです。しかしながら、日本語OS以外で動作させた場合もShift_JISで出力してしまうため、0(CP_ACP)を指定してやると、そのOSの既定コードで出力することができます。

ASP には、どのコード ページを使用するかを決める新しいセッション プロパティ Session.Codepage があります。Session.Codepage の値には、システムで利用できるコード ページのコード ページ ID でなければいけません。Session.Codepage の値を存在しないコード ページ ID に設定するとエラーが返されます。Session.Codepage のデフォルト値は、システムのデフォルト ANSI コード ページであるCP_ACP です。
リリース ノート はてなブックマーク - リリース ノート

*1:日本語環境の場合は、CP932。いわゆるShift_JISです。