お世話になっております。
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で通信されるために上記対応が必要と考えております。
ご教示のほど、どうぞよろしくお願いいたします。
No.7ベストアンサー
- 回答日時:
最後にこの件のまとめとして、私の知人が、わかりやすくBlogにまとめてくれましたので、お知らせします。
http://kame-taro.spaces.live.com/Blog/cns!CD8062 …
恐らく、Web.config で location Pathを指定する方法と、私が教授した、Global.asax を活用する方法、何が違うのかがわかると思います。
結論はどちらでも、できる!になりますが、どれほど細かいエンコード制御を行うのか、質問からでは計りかねるため、後はご判断にお任せします。
それでは、この件、ご納得頂けるようであれば、質問を締めて頂きたいと思います。宜しくお願いします。
No.8
- 回答日時:
すいません、URLがおかしかったので、もう一度、お知らせします。
本件を纏めてくれた知人のBlog
http://kame-taro.spaces.live.com/blog/cns!CD8062 …
宜しくお願いします。
参考URL:http://kame-taro.spaces.live.com/blog/cns!CD8062 …
kero_mioさん、この度は大変お世話になりました。
kame-taroさんのBlogも拝見させて頂き、よく理解することができたと思います。
質問内容につきましてはkero_mioさんのご指摘を真摯に受け止め、今後に活かしたいと考えております。
No.6
- 回答日時:
>今回は元々、ページ単位でRequestエンコードを指定する手段を質問していたかと思います。
質問された内容は、どうみても、そのように読み取れないですよね?質問の内容をもう一度、読み返してみて下さい。
「エラーになってしまいます。ご教示お願いします」だけでは、誤解を招きます。
他にRequestエンコードを指定する方法はありませんか?と聞いて頂ければ、済んだ話だったのではないかと思います。
このOKWave系列のコミュニティのみならず、
是非、今後のために、活かして頂けると幸いです。
No.5
- 回答日時:
>web.configにloactionを使用してrequestEncodingを指定する方法があるかと考えたのですが、この理解に間違いないでしょうか?
web.config にlocation を設定することでPage単位のエンコードを指定することはできます。どちらでも一緒です。
しかし、今回の質問の趣旨は、あくまでPageディレクティブでPage単位でRequestエンコードを指定でいないのか?(エラーになってしまうから)という質問であり、「他にやり方はないですか?」という聞き方ではなかったですよね?
そういう質問であれば、他に指定する方法ないですか?
と質問して頂きたかったです。(そうすれば、location指定したやり方、私も知ってましたので、そのように回答していたかと)
以上、宜しくお願いします。
この回答への補足
ご回答有難うございます。
今回は元々、ページ単位でRequestエンコードを指定する手段を質問していたかと思います。
質問内容にMSDNの件を含めておりましたので、誤解を招いてしまったのであれば、お詫び申し上げます。
No.4
- 回答日時:
再修正した中でも誤字脱字がありましたことお詫びします。
縁コーディング × -> エンコーディング ○
特定のPageのRequestエンコードをUTF-8になるように処理するには、どうすれば良いか? × ⇒
「特定のPageのRequest(受信)エンコードをUTF-8で処理するには、どうすれば良いか?」
大変失礼いたしました。
No.3
- 回答日時:
すいません、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 …
以上、よろしくお願いします。
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>
No.2
- 回答日時:
状況はわかりました。
まとめると、
・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している件については、私の方から、マイクロソフトの間違いを指摘しておきたいと思います。
以上、よろしくお願いします。
No.1
- 回答日時:
エラーは、どこで発生してますか?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" />
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
都道府県穴埋めゲーム
都道府県の名前を1人1つずつ投稿してください。全ての都道府県が出たら締め切ります!
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
ASP.NET SJIS→UTF-8文字コード変換。
Microsoft ASP
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どう増強すべきか
-
【C#/Java?】try-catchでcatch...
-
マクロで、次のコードへ行く前...
-
ExcelのVBAで、選択したファイ...
-
VBA 複数の行を高速で削除する...
-
Word VBA。各マクロの間に待ち...
-
シグナル 6(SIGABRT)とは?
-
エクセルファイルをフロッピー...
-
エクセル VBAで複数セル選択時...
-
StatusStripの表示が更新されな...
-
Excelプロセスが消えない
-
private subモジュールを他のモ...
-
特定の名前のオートシェイプの...
-
IF文に時間(何時から何時ま...
-
【C#】Page_Loadさせない方法に...
-
Excel VBA セルの名前があるか...
-
バッチファイルでのエラー処理...
-
エクセルVBAでプロシージャ名を...
-
RaiseEventのメリット
-
VBA マクロ 英語版WINDOWSで全...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
vbaのエラー対応(実行時エラー...
-
IF文に時間(何時から何時ま...
-
private subモジュールを他のモ...
-
特定の名前のオートシェイプの...
-
どう増強すべきか
-
Excelプロセスが消えない
-
シグナル 6(SIGABRT)とは?
-
マクロで、次のコードへ行く前...
-
特定のファイルを他のプロセス...
-
エクセル VBAで複数セル選択時...
-
Excel VBA セルの名前があるか...
-
順番に処理させたい
-
ExcelのVBAで、選択したファイ...
-
VB6にてネットワーク上にある共...
-
【C#】Page_Loadさせない方法に...
-
Word VBA。各マクロの間に待ち...
-
ListViewから選択中の文字列を取得
-
【Vb.net】プリンタジョブの取得
-
VBA 複数の行を高速で削除する...
おすすめ情報