@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

POST で漢字のデータを送りたい。

1
投稿者投稿内容
わちゃ
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 162
お住まい・勤務地: 東京
投稿日時: 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 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-11-01 20:45
UTF-8の文字列をURLエンコーディングして送っていますね。
受け取り側でエンコーディングがUTF-8として受け取れば問題ないはずですが、受け取る
側はどうなっているのでしょうか。
わちゃ
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 162
お住まい・勤務地: 東京
投稿日時: 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 して逃げようかと思います。

何か、他にいいアイデアがあれば教えて教えていただければと思います。

よろしくお願い致します。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2006-11-01 21:09
引用:

わちゃさんの書き込み (2006-11-01 21:00) より:
さて、サーバ側は、php なのですが、

mbstring.detect_order = auto

という設定が、POST されたデータの文字コード解析の設定かと思います。



mbstring.http_input は?

というかphpスクリプトの先頭でPOSTしてくる相手に合わせて設定してもいいです。internal_encodingが何であっても入出力はどうにでも設定出来ますから。
わちゃ
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 162
お住まい・勤務地: 東京
投稿日時: 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 ]
わちゃ
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 162
お住まい・勤務地: 東京
投稿日時: 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

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