- PR -

POSTされたデータが文字化けする

投稿者投稿内容
よしまさ
常連さん
会議室デビュー日: 2003/11/04
投稿数: 20
投稿日時: 2006-01-25 10:14
お世話になります。

現在、
ASP.NET1.1、
IIS6.0、
Windows2003Server
という環境でECサイトを構築しております。

今回のECサイト構築プロジェクトでは、
外部サイトとの連携があり、
外部サイトからは、POSTでデータが送信されてくることになっています。

そのときに、POSTされたデータが文字化けしてしまうのです。
( Request.Form["XXX"] で取得した値が文字化け )

こちらで調査した結果、
POSTされてくるデータの文字セットはEUCのようです。

試したことは、以下の通りです。

・ @Pageディレクティブの値をCodePage属性をEUCに設定

・ Server.UrlDecodeメソッドでのデコード

・ Shift-JisエンコードでGetBytesし、EucエンコードでGetString( 以下のコード参照 )
byte[] ebyte = sjis.GetBytes( "POSTされたデータ" );
string s = euc.GetString( ebyte );

※ Web.configのglobalizationセクション
requestEncoding、responseEncodingキー
はShift-jisに設定してあります。

どなたかご教授いただければと思います。

以上、よろしくお願いします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-01-25 10:20
POSTでEUCのデータがあがってくるのであれば

> ※ Web.configのglobalizationセクション
> requestEncoding、responseEncodingキー
> はShift-jisに設定してあります。

これをEUCにしないといけないのでは?
POSTってようするにrequestですよね。。。
よしまさ
常連さん
会議室デビュー日: 2003/11/04
投稿数: 20
投稿日時: 2006-01-25 10:36
どっとねっとふぁん様

ご返答ありがとうございます。

今回のECサイト構築は、
globalizationセクション
requestEncoding、responseEncodingキー
をShift-jisで開発を進めており、
今からEucに設定することは現時点では不可能に近い状態です。

特定のページだけ変更できるような設定などがあればよいのですが、
どうやればよいのかがわかりません。

Requestオブジェクトが生成される前にフックして
特定のページだけエンコードを変更するというようなことは
可能でしょうか。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-01-25 11:34
> 今回のECサイト構築は、
> globalizationセクション
> requestEncoding、responseEncodingキー
> をShift-jisで開発を進めており、
> 今からEucに設定することは現時点では不可能に近い状態です。

ECサイトで外部サイトとの連携があるんですか。
こういったところは事前に確認してなかったんでしょーか。

> 特定のページだけ変更できるような設定などがあればよいのですが、
> どうやればよいのかがわかりません。

ないと思います。

方法があるとすればHttpModule使ってEUCコードではいってくる
データがページに渡る前にShift_JISに変換してしまうといった
形でしょうかね。
詳しく調べてみないと本当にできるかどうかわかりませんけど。


todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-01-25 11:51
引用:

特定のページだけ変更できるような設定などがあればよいのですが、
どうやればよいのかがわかりません。



[ASP.NET]構成ファイルの適用範囲を限定するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/138asplocation/asplocation.html
よしまさ
常連さん
会議室デビュー日: 2003/11/04
投稿数: 20
投稿日時: 2006-01-25 12:00
どっとねっとふぁん様

ご返答ありがとうございます。

>ECサイトで外部サイトとの連携があるんですか。
>こういったところは事前に確認してなかったんでしょーか。
仰るとおりです。
恥ずかしいばかりです。

>方法があるとすればHttpModule使ってEUCコードではいってくる
>データがページに渡る前にShift_JISに変換してしまうといった
>形でしょうかね。
やはりそうですか。
ISAPIFilterのようなことをやるしかなのですかね。

IHttpModuleを実装するのは大変そうなきがしていたので、
最終手段にしたかったのですが、
もう少し調べてみます。

ありがとうございます。

よしまさ
常連さん
会議室デビュー日: 2003/11/04
投稿数: 20
投稿日時: 2006-01-25 12:04
todo様

ご返答ありがとうございます。

Page単位で指定することが可能なのですね。
知りませんでした。
試してみます。

ありがとうございました。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-01-25 13:11
引用:

・ Shift-JisエンコードでGetBytesし、EucエンコードでGetString( 以下のコード参照 )


それでいけそうな気がします。駄目ですか?

コード:
byte[] b1 = Encoding.GetEncoding( "Shift_JIS" ).GetBytes ( Request[ "value1" ] );
string s2 = Encoding.GetEncoding( "euc-jp" ).GetString( b1 );



_________________
囚人のジレンマな日々

スキルアップ/キャリアアップ(JOB@IT)