アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になっております。

ASP.NET2.0でWebアプリケーションを開発しておりまして、現状すべてのページをShift-JISの文字コードで構築しています。
文字コードの指定はWeb.configのsystem.web.globalizationで指定しています。

標記の件ですが、特定のページだけUTF-8を利用したい場合、どのような手段が考えられますでしょうか?
MSDNでは@Pageディレクティブにて指定できる旨が記載されているのですが、実際に指定してシステムを実行するとアプリケーションエラーが発生してしまいます。
http://msdn.microsoft.com/ja-jp/library/39d1w2xf …

特定のページのみASP.NET AJAXの利用を考えておりまして、その場合の非同期通信が文字コードUTF-8で通信されるために上記対応が必要と考えております。

ご教示のほど、どうぞよろしくお願いいたします。

A 回答 (8件)

最後にこの件のまとめとして、私の知人が、わかりやすくBlogにまとめてくれましたので、お知らせします。



http://kame-taro.spaces.live.com/Blog/cns!CD8062 …

恐らく、Web.config で location Pathを指定する方法と、私が教授した、Global.asax を活用する方法、何が違うのかがわかると思います。
結論はどちらでも、できる!になりますが、どれほど細かいエンコード制御を行うのか、質問からでは計りかねるため、後はご判断にお任せします。

それでは、この件、ご納得頂けるようであれば、質問を締めて頂きたいと思います。宜しくお願いします。
    • good
    • 0

すいません、URLがおかしかったので、もう一度、お知らせします。



本件を纏めてくれた知人のBlog
http://kame-taro.spaces.live.com/blog/cns!CD8062 …

宜しくお願いします。

参考URL:http://kame-taro.spaces.live.com/blog/cns!CD8062 …
    • good
    • 0
この回答へのお礼

kero_mioさん、この度は大変お世話になりました。
kame-taroさんのBlogも拝見させて頂き、よく理解することができたと思います。
質問内容につきましてはkero_mioさんのご指摘を真摯に受け止め、今後に活かしたいと考えております。

お礼日時:2008/06/16 17:00

>今回は元々、ページ単位でRequestエンコードを指定する手段を質問していたかと思います。



質問された内容は、どうみても、そのように読み取れないですよね?質問の内容をもう一度、読み返してみて下さい。

「エラーになってしまいます。ご教示お願いします」だけでは、誤解を招きます。
他にRequestエンコードを指定する方法はありませんか?と聞いて頂ければ、済んだ話だったのではないかと思います。

このOKWave系列のコミュニティのみならず、
是非、今後のために、活かして頂けると幸いです。
    • good
    • 0

>web.configにloactionを使用してrequestEncodingを指定する方法があるかと考えたのですが、この理解に間違いないでしょうか?



web.config にlocation を設定することでPage単位のエンコードを指定することはできます。どちらでも一緒です。
しかし、今回の質問の趣旨は、あくまでPageディレクティブでPage単位でRequestエンコードを指定でいないのか?(エラーになってしまうから)という質問であり、「他にやり方はないですか?」という聞き方ではなかったですよね?

そういう質問であれば、他に指定する方法ないですか?
と質問して頂きたかったです。(そうすれば、location指定したやり方、私も知ってましたので、そのように回答していたかと)

以上、宜しくお願いします。

この回答への補足

ご回答有難うございます。
今回は元々、ページ単位でRequestエンコードを指定する手段を質問していたかと思います。

質問内容にMSDNの件を含めておりましたので、誤解を招いてしまったのであれば、お詫び申し上げます。

補足日時:2008/06/16 00:29
    • good
    • 0

再修正した中でも誤字脱字がありましたことお詫びします。



縁コーディング × -> エンコーディング ○

特定のPageのRequestエンコードをUTF-8になるように処理するには、どうすれば良いか? × ⇒
「特定のPageのRequest(受信)エンコードをUTF-8で処理するには、どうすれば良いか?」

大変失礼いたしました。
    • good
    • 0

すいません、Shift_JIS と UTF-8 が逆でした。


(実際は、特定のPageのだけ、UTF-8で処理したいんですよね)

日本語も変だったので、もう一度、キレイにまとめて、回答致します。
すいませんでした。

・MSDN(​http://msdn.microsoft.com/ja-jp/library/39d1w2xf …​に掲載されていた「@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.asp …

以上、よろしくお願いします。
    • good
    • 0
この回答へのお礼

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>

お礼日時:2008/06/15 09:44

状況はわかりました。


まとめると、

・MSDN(http://msdn.microsoft.com/ja-jp/library/39d1w2xf …に掲載されていた「@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している件については、私の方から、マイクロソフトの間違いを指摘しておきたいと思います。

以上、よろしくお願いします。
    • good
    • 0

エラーは、どこで発生してますか?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" />

補足日時:2008/06/11 02:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!