- - PR -
POST で漢字のデータを送りたい。
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-11-01 20:19
いつもお世話になっております。
現在、VB .Net から、Web サーバにデータを POST するプログラムを 作成しております。 どうにも、POST したデータの日本語の文字化けが発生してしまいうまくいっておりません。 まず、VB .Net で次のようなコードを実行してみました。 Dim Webクライアント As New Net.WebClient Dim POST変数 As New System.Collections.Specialized.NameValueCollection POST変数.Add("MESSAGE", "abcあいうえお") Dim アクセス先 As String = "http://xx.xx.xx.xx/test.php" Dim 結果データ As Byte() = Webクライアント.UploadValues(アクセス先, "POST", POST変数) この時のリクエストを「横取り丸」という proxy のソフトで、Web のアクセスの 送受信の内容を見れるもので見てみました。 すると、次のような内容になっていました。 MESSAGE=abc%e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a どうやら「あ」という文字が「%e3%81%82」というようにエンコードされているようです。 何の文字コードか分からず、困ってしまったのでとりあえず、 VB 2005 で次のコードを実行して見ました。 Dim Webクライアント As New Net.WebClient *Webクライアント.Encoding = System.Text.Encoding.GetEncoding("EUC-JP") ←この行を追加 Dim POST変数 As New System.Collections.Specialized.NameValueCollection POST変数.Add("MESSAGE", "abcあいうえお") Dim アクセス先 As String = "http://xx.xx.xx.xx/test.php" Dim 結果データ As Byte() = Webクライアント.UploadValues(アクセス先, "POST", POST変数) ヘルプによると、.Net framework 2.0 で追加されたプロパティでしたが、 >文字列のアップロードとダウンロードに使用する Encoding を取得または設定します。 とあるので、POST される文字列のエンコードにも使われるかと思いきや、 どうにもそうではなかったようで、MESSAGE は VB .Net で 実行した時と同じ文字列が送信されてしまいました。 要は、日本語の文字列を POST したいのですが、どなたかご存知の方はいらっしゃらないでしょうか? よろしくお願い致します。 [ メッセージ編集済み 編集者: わちゃ 編集日時 2006-11-01 20:31 ] | ||||
|
投稿日時: 2006-11-01 20:45
UTF-8の文字列をURLエンコーディングして送っていますね。
受け取り側でエンコーディングがUTF-8として受け取れば問題ないはずですが、受け取る 側はどうなっているのでしょうか。 | ||||
|
投稿日時: 2006-11-01 21:08
どうも、返答ありがとうございます。
サーバ側は、php なのですが、 mbstring.detect_order = auto という設定が、POST されたデータの文字コード解析の設定かと思います。 要は、自動判別となっていると考えていました。 とりあえず、POST された内容に対して、UTF-8 から、EUC に文字コード変換を 行なってみたところ、正常に判別できました。 リクエストヘッダに、文字コードがあればいいのにって感じですよね。 さて、一応 VB .Net からと分かっていれば UTF-8 からのコード変換をすればいいと 思うのですが、IE からの入力だと EUC で送られれてくるようです。 この判別ができないと、なかなか大変なんですが、なにか手はあるでしょうか? とりあえずは、VB からだったら、ENCODING=UTF8 っていうような変数を 別に POST して逃げようかと思います。 何か、他にいいアイデアがあれば教えて教えていただければと思います。 よろしくお願い致します。 | ||||
|
投稿日時: 2006-11-01 21:09
mbstring.http_input は? というかphpスクリプトの先頭でPOSTしてくる相手に合わせて設定してもいいです。internal_encodingが何であっても入出力はどうにでも設定出来ますから。 | ||||
|
投稿日時: 2006-11-01 21:26
shimix 殿
ご返答ありがとうございます。 mbstring.http_input も書くべきでしたね。すいません。 見落としていました。 こちらも、次のようになっています。 mbstring.http_input = auto auto の場合、マニュアルには、 ; "auto" は、"ASCII,JIS,UTF-8,EUC-JP,SJIS"に展開されます。 となっていますが、どうにもうまくいっていない感じですね。 で、mb_detect_order ( "UTF-8" ) という行を最初に入れてみたのですが、 状況は変わりませんでした。 なにか、間違ってますでしょうか? もっとも、その前に、WebClient の挙動も怪しい感じなのが泣けます。 proxy の設定も、https で、http の proxy を見に行って、 http で、secure の proxy を見に行ったりするみたいな雰囲気です。 Encoding については、たしかに UploadValues に対して有効とは 書いていないですが、できれば対応して欲しかった気がします。 [ メッセージ編集済み 編集者: わちゃ 編集日時 2006-11-01 21:28 ] | ||||
|
投稿日時: 2006-11-02 06:32
引き続きいろいろ調べてみたところ、次のページが見つかりました。
http://www-ise3.ise.eng.osaka-u.ac.jp/miura/?cmd=read&page=PHP+GET%2FPOST%A5%E1%A5%BD%A5%C3%A5%C9%A4%C7%A4%CE%C6%FC%CB%DC%B8%EC%A4%CE%CA%B8%BB%FA%B2%BD%A4%B1%CB%C9%BB%DF#content_1_5 どうにも、本質的に改善できる問題でなく、かつ適切な回避策もこちらのページにのっておりました。 みなさま、ありがとうございました。 |
1