- - PR -
POSTされたデータが文字化けする
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-25 14:41
囚人様
ご返答ありがとうございます。 私もいけそうな気がしたんですが、 だめでした。 Web.conifgの responseEncodingキーあたりが いけない気がしています。 | ||||||||
|
投稿日時: 2006-01-25 15:15
試したら先のコードで解消されたんですが、何かまだ条件があるのかな?
EUC って EUC-JP ですよね? Shift_JIS -> Unicode requestEncoding が Shift_JIS だという事は、サーバ側は Shift_JIS だと思って受け取るわけですよね。 内部で処理するときは String だとか Char だとかで扱いたいので、その Shift_JIS で来た文字列を Unicode にしてやってるわけですよね。 だから戻す。 Unicode -> Shift_JIS byte[] b1 = Encoding.GetEncoding( "Shift_JIS" ).GetBytes ( Request[ "value1" ] ); この b1 がクライアントが送信した値になっているわけですよね。 で、これが EUC-JP だと言うのだから EUC-JP -> Unicode string s2 = Encoding.GetEncoding( "euc-jp" ).GetString( b1 ); かな?と思ったんですが。 _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2006-01-25 15:33
たまたまと思ったほうがいいでしょう。 でたらめな文字コードでデコードしたものが 元の情報を全て保持している保証はありません。 | ||||||||
|
投稿日時: 2006-01-25 16:04
ありゃ。まじっすか^^;
実際試したのは、POST を送る方をプレーン HTML で書き、euc-jp で保存。POST を受ける方は質問者と同じ条件でやりました。処理を入れなかったら化けてますが、処理を入れると OK のようです。 上記はまた別の例です。 いろんな文字を試したのですが、いけているような…。 _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2006-01-25 16:39
まじっす。 .NETに限らずUnicodeへの変換はテーブルを見ながら一文字ずつ置き換える以外にありません。この時、Unicode変換テーブルに定義されていない文字(外字領域やShiftJISで文字を割当てていない領域)は単純に捨てられるか、変換できなかった事を示す文字コードに置き換えられます。逆変換なんて出来ません。 なので攻略方法としては、ASP.NETフレームワークが文字コードを変換する手前で、EUC->ShiftJIS又はEUC->Unicodeに変換する以外にありません。ISAPIフィルターを作るか、Proxyサーバーを作るか、相手側で変換してから送ってもらうか、方法はいろいろあるでしょうけど。 | ||||||||
|
投稿日時: 2006-01-25 23:54
まじだったっすか。 なるほど。奥が深いですね。ありがとうございます。 そうなると、この問題は根が深いですねぇ。 _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2006-01-26 10:54
遅くなりまして申し訳ありません。
みなさまご返答ありがとうございます。 todo様にお教えいただいた <location>要素を使用して、 外部連携のあるページだけ、 euc-jpに設定してみましたが、 以下のエラーが発生してしまい 結局うまくいきませんでした。 [ArgumentException: mlang はサポートされたエンコード名ではありません。 パラメータ名 : name] System.Globalization.EncodingTable.internalGetCodePageFromName(String name) +225 System.Globalization.EncodingTable.GetCodePageFromName(String name) +158 System.Web.HttpResponse.get_ContentEncoding() +466 System.Web.HttpWriter.UpdateResponseEncoding() +35 System.Web.HttpWriter..ctor(HttpResponse response) +173 System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +283 mlang.dllが特定のコードページ(51932等)を指定したときだけ .Netからみえていない感じなのですが。 またmlangのバージョンも、 2003では6.0.37890.1830 で XPは6.0.2900.2530 となっておりこのあたりも気になっております。 | ||||||||
|
投稿日時: 2006-01-26 13:30
南部です。
|