- ベストアンサー
ASP.NETで特定のページだけ文字コードを変更したい
- ASP.NET2.0でWebアプリケーションを開発しておりまして、すべてのページをShift-JISの文字コードで構築していますが、特定のページだけUTF-8を利用したい場合の手段を教えてください。
- MSDNでは@Pageディレクティブにて指定できると記載されていますが、実際に指定するとアプリケーションエラーが発生してしまいます。特定のページのみASP.NET AJAXを利用する場合は、UTF-8の文字コードを使用するための対応が必要です。
- お手数ですが、ASP.NETで特定のページだけ文字コードを変更する方法について教えてください。特定のページのみUTF-8を使用したい場合の手順を教示ください。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
最後にこの件のまとめとして、私の知人が、わかりやすくBlogにまとめてくれましたので、お知らせします。 http://kame-taro.spaces.live.com/Blog/cns!CD806281181610EF!466.entry?action=post&wa=wsignin1.0 恐らく、Web.config で location Pathを指定する方法と、私が教授した、Global.asax を活用する方法、何が違うのかがわかると思います。 結論はどちらでも、できる!になりますが、どれほど細かいエンコード制御を行うのか、質問からでは計りかねるため、後はご判断にお任せします。 それでは、この件、ご納得頂けるようであれば、質問を締めて頂きたいと思います。宜しくお願いします。
その他の回答 (7)
- kero_mio
- ベストアンサー率90% (94/104)
すいません、URLがおかしかったので、もう一度、お知らせします。 本件を纏めてくれた知人のBlog http://kame-taro.spaces.live.com/blog/cns!CD806281181610EF!466.entry 宜しくお願いします。
- kero_mio
- ベストアンサー率90% (94/104)
>今回は元々、ページ単位でRequestエンコードを指定する手段を質問していたかと思います。 質問された内容は、どうみても、そのように読み取れないですよね?質問の内容をもう一度、読み返してみて下さい。 「エラーになってしまいます。ご教示お願いします」だけでは、誤解を招きます。 他にRequestエンコードを指定する方法はありませんか?と聞いて頂ければ、済んだ話だったのではないかと思います。 このOKWave系列のコミュニティのみならず、 是非、今後のために、活かして頂けると幸いです。
- kero_mio
- ベストアンサー率90% (94/104)
>web.configにloactionを使用してrequestEncodingを指定する方法があるかと考えたのですが、この理解に間違いないでしょうか? web.config にlocation を設定することでPage単位のエンコードを指定することはできます。どちらでも一緒です。 しかし、今回の質問の趣旨は、あくまでPageディレクティブでPage単位でRequestエンコードを指定でいないのか?(エラーになってしまうから)という質問であり、「他にやり方はないですか?」という聞き方ではなかったですよね? そういう質問であれば、他に指定する方法ないですか? と質問して頂きたかったです。(そうすれば、location指定したやり方、私も知ってましたので、そのように回答していたかと) 以上、宜しくお願いします。
補足
ご回答有難うございます。 今回は元々、ページ単位でRequestエンコードを指定する手段を質問していたかと思います。 質問内容にMSDNの件を含めておりましたので、誤解を招いてしまったのであれば、お詫び申し上げます。
- kero_mio
- ベストアンサー率90% (94/104)
再修正した中でも誤字脱字がありましたことお詫びします。 縁コーディング × -> エンコーディング ○ 特定のPageのRequestエンコードをUTF-8になるように処理するには、どうすれば良いか? × ⇒ 「特定のPageのRequest(受信)エンコードをUTF-8で処理するには、どうすれば良いか?」 大変失礼いたしました。
- kero_mio
- ベストアンサー率90% (94/104)
すいません、Shift_JIS と UTF-8 が逆でした。 (実際は、特定のPageのだけ、UTF-8で処理したいんですよね) 日本語も変だったので、もう一度、キレイにまとめて、回答致します。 すいませんでした。 ・MSDN(http://msdn.microsoft.com/ja-jp/library/39d1w2xf(VS.80).aspx)に掲載されていた「@Pageディレクティブ」の「requestEncoding」の使い方ですが、Pageは、そもそも応答を返す時どうするか?を設定するものなので、設定はできません。 (MSDNに掲載されている内容が間違っています) ただし、@PageディレクティブにPage応答用のエンコードを指定する「responseEncoding」プロパティにUTF-8を設定したり、「CodePage」に65001(UTF-8)を設定することはできます。 (応答用のエンコードは@Pageディレクティブで指定できるが、 受信用のエンコードは@Pageディレクティブで指定できない) ・さて問題は、Request時に任意のエンコードで処理するには? になりますが、@Pageディレクティブには requestEncodingプロパティがない上に、Web.configや machine.config ではなく、特定のPageのRequestエンコードを UTF-8になるように処理するには、どうすれば良いか?という点です。 やるとしたら、Global.asaxファイルを作成し、 そこに、Application_BeginRequestイベントを使って、 特定のPageだけRequestエンコードを変更する処理を 入れてやるしか方法がありません。 VBなのかC#なのかわかりませんが、とりあえず両方サンプルを掲載しておきます。 C#の場合(Global.asax) ----------------------------- <%@ Application Language="C#" %> <script runat="server"> protected void Application_BeginRequest(object sender, EventArgs e) { if (Request.Path == "/hoge/Specialed.aspx") { Request.ContentEncoding = Encoding.GetEncoding("UTF-8"); } else { // Web.Config か machine.config の // globalizationを使用するので何も記述しない } } </script> VBの場合(Global.asax) ----------------------------- <%@ Application Language="VB" %> <script runat="server"> Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs) If Request.Path = "/hoge/Specialed.aspx" Then Request.ContentEncoding = Encoding.GetEncoding("UTF-8") Else ' Web.Config か machine.config の ' globalizationを使用するので何も記述しない End If End Sub </script> 以上です。 まとめると、 ・Response(応答)の縁コーディングは、@Pageディレクティブで指定できる ・Request(受信)のエンコーディングは、Page単位でできるプロパティがないので、Global.asaxのBeginRequestイベントで特定PageのURLを判別し、Request.ContentEncodingを活用して、UTF-8に変換する というのが回答です。 それから、MSDNが間違った情報をUPしている件については、私の方から、マイクロソフトに対し、間違いを指摘しておきましたので 合わせてご連絡申し上げます。 http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=3470148&SiteID=7 以上、よろしくお願いします。
お礼
kero_mioさん、ご回答頂きありがとうございました。 また、お礼が遅くなってしまいましたことをお詫び申し上げます。 上記の件、理解できました。また、Microsoftへのご報告までして頂きまして大変感謝しております。 kero_mioさんにご回答頂きました方法とは別に、web.configにloactionを使用してrequestEncodingを指定する方法があるかと考えたのですが、この理解に間違いないでしょうか? <system.web> <globalization requestEncoding="Shift-JIS" responseEncoding="Shift-JIS" /> ・・・・・ </system.web> <location path="sample01.aspx"> <system.web> <globalization requestEncoding="UTF-8" responseEncoding="Shift-JIS" /> </system.web> </location>
- kero_mio
- ベストアンサー率90% (94/104)
状況はわかりました。 まとめると、 ・MSDN(http://msdn.microsoft.com/ja-jp/library/39d1w2xf(VS.80).aspx)に掲載されていた「@Pageディレクティブ」の「requestEncoding」の使い方ですが、Pageは、そもそも応答を返す時どうするか?を設定するものなので、設定はできません。 (MSDNに掲載されている内容が間違っています) ただし、@PageディレクティブにPage応答用のエンコード「responseEncoding」にShift_JISを設定したり、「CodePage」に932(Shift JIS)を設定することはできます。 ・さて問題は、Request時に任意のエンコードで処理するには? になりますが、@Pageディレクティブがない上に、Web.configや machine.config ではなく、特定のPageのみエンコードがSHIFT-JIS になるように処理する方法は悩みますよね。 やるとしたら、Global.asaxファイルを作成し、そこに、Application_BeginRequestイベントを使って、特定のPageだけエンコードを変更する処理を入れてやるしか方法がありません。 VBなのかC#なのかわかりませんが、とりあえず両方サンプルを掲載しておきます。 C#の場合(Global.asax) <%@ Application Language="C#" %> <script runat="server"> protected void Application_BeginRequest(object sender, EventArgs e) { if (Request.Path == "/hoge/Specialed.aspx") { Request.ContentEncoding = Encoding.GetEncoding("Shift_JIS"); } else { // Web.Config か machine.config の // globalizationを使用するので何も記述しない } } </script> VBの場合(Global.asax) <%@ Application Language="VB" %> <script runat="server"> Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs) If Request.Path = "/hoge/Specialed.aspx" Then Request.ContentEncoding = Encoding.GetEncoding("Shift_JIS") Else ' Web.Config か machine.config の ' globalizationを使用するので何も記述しない End If End Sub </script> 以上です。 まとめると、 ・ResponseのPage単位でのエンコーディングは、@Pageディレクティブ でできる ・Requestのエンコーディングは、Page単位でできるプロパティがないので、Global.asaxを活用する というのが回答です。 それから、MSDNが間違った情報をUPしている件については、私の方から、マイクロソフトの間違いを指摘しておきたいと思います。 以上、よろしくお願いします。
- kero_mio
- ベストアンサー率90% (94/104)
エラーは、どこで発生してますか?Ajax側ですか?ASP.NET側ですか? また、具体的に、Web.Configファイルで設定した、globalizationの内容はどのような内容でしょうか?ソース添付して頂けますか? まずそこからお話したいです。よろしくお願いします。 #確かにASP.NETは標準がUTF-8 ではなく、Unicodeなので、 Ajaxで弊害が起こる可能性はあるなぁとは感じてます。
補足
kero_mioさん、ご回答頂きましてありがとうございます。 エラーはASP.NET側で発生します。 そもそも@PageディレクティブにrequestEncodingを指定する際に入力補完が全く機能せず、実行すると該当するプロパティが存在しないということでエラーになります。 globalizationにつきましては下記のように設定しています。 <globalization requestEncoding="Shift-JIS" responseEncoding="Shift-JIS" />
お礼
kero_mioさん、この度は大変お世話になりました。 kame-taroさんのBlogも拝見させて頂き、よく理解することができたと思います。 質問内容につきましてはkero_mioさんのご指摘を真摯に受け止め、今後に活かしたいと考えております。