ActiveServerPageにてプログラム内でPOST送信をしています。

その際、全角文字を送信した際、受信サーバー側で文字化けをしてしまいます。

Set xmlHttp = Server.CreateObject("Msxml2.XMLHTTP")
strPostData = "aaa=あああ"
xmlHttp.Open "POST", "http://xxx/xxx.asp", False
xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlHttp.setRequestHeader "Referer", "http://xxx/xxx.asp"
xmlHttp.Send strPostData
Response.Write xmlHttp.responseText

このようにプログラムを記述しているのですが何が問題かおおしえいただけますでしょうか。
尚、HTMLのフォームから同様の情報をPOSTした際は文字化けなく正しく処理がおこなわれます。

受け取り側のプログラムに関してはこちらでは中身が見れない状態になっております。
上記送信プログラムとHTMLのフォームそれぞれ文字コードはSJISです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/11/13 10:28:26
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント10pt

ASP ファイル自体の文字コードがおかしいか、 URLEncode してないからだと思う。

Set xmlHttp = Server.CreateObject("Msxml2.XMLHTTP")
strPostData = "aaa=" & Server.URLEncode("あああ")
xmlHttp.Open "POST", "http://xxx/xxx.asp", False
xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlHttp.setRequestHeader "Referer", "http://xxx/xxx.asp"
xmlHttp.Send strPostData
Response.Write xmlHttp.responseText

ASP講座 13章 [ Server オブジェクト ]

id:salvatore

URLEncodeも試しました。BASPを使って文字コード自体をUTF-8等に切り替えたりしてみたのですが、ダメでした。ASPファイルの文字コードはSJISです。

2008/11/13 08:41:16
id:fester No.2

回答回数124ベストアンサー獲得回数20

ポイント100pt

前回回答したものです。

ADODB.Stream で文字コードを変換してみました。

こちらでいかがでしょうか?


Option Explicit

Dim html
Dim url, strPostData

url = "http://xxx/xxx.asp"
strPostData = "aaa=あああ"

html = GetHttpResponse("POST", url, strPostData, "Shift_JIS")

Response.Write html

Private Function GetHttpResponse(ByVal methodType, ByVal url, ByVal sendData, ByVal charset)
    Const adTypeBinary = 1
    Const adTypeText = 2
    Const agent = "Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1)"

    Dim dst
    Set dst = Server.CreateObject("ADODB.Stream")

    dst.Open
    dst.Type = adTypeBinary

    Dim xmlhttp
    Set xmlhttp = Server.CreateObject("Msxml2.XMLHTTP")
    xmlhttp.Open methodType, url, False
    xmlhttp.SetRequestHeader "User-Agent", agent
    xmlhttp.send (sendData)

    dst.Write (xmlhttp.responseBody)
    dst.Position = 0
    dst.Type = adTypeText
    dst.charset = charset
    GetHttpResponse = dst.ReadText
    dst.Close

    Set dst = Nothing

End Function


id:salvatore

ありがとうございます。ADODB.Streamを使用しても以前文字化けするようです。

ただ、上記に加えxmlhttpをNothingすることで相手先のサーバーから帰ってくる(応答)HTMLの文字化けが解消されました。また、情報があればお教えいただければありがたいです。

2008/11/13 09:13:13
id:fester No.3

回答回数124ベストアンサー獲得回数20

ポイント100pt

相手先のサーバーから帰ってくる(応答)HTMLが文字化け

という認識でいたのですが、違うのでしょうか?


POST先で、パラメータが化けてしまうということでしょうか?

先程の回答に、

xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

が抜けていましたので、追加してみてください。


回答へのコメント

を開いてもらえると、無駄に回答しなくても済むのですが。

id:salvatore

現在、お教えいただいたコードを元に下記のようにしております。

「回答へのコメント」というのはどこから見るのでしょうか。(スミマセン。はてなの使い方がわかっていないかもしれません)

今一度情報を整理して記載します。

サーバーAからPOSTでデータをサーバーBに飛ばします。

サーバーBでは受け取ったデータをDBに格納し、サーバーAにHTMLを返します。

このHTMLは「処理が終了しました。」という内容だけのHTMLになります。

もともとの状況として、サーバーBでPOSTで受け取ったデータが文字化けしていて

且つ、戻ってくるHTMLも文字化けしているという状況でした。

festerさんに教えていただいたADODB.Streamでの文字コード変換によって、

HTMLの文字化けは解消したのですが、サーバーBでPOSTで受け取ったデータの

文字化けは改善されない状態です。

xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

を追加してもNGでした。

xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=SJIS"

としても同様にNGでした。

HTMLのフォームを作成してそこからPOSTした場合は正しく処理されるので、

サーバーBの問題ではなく、サーバーAのPOSTするプログラムの問題だと思っております。

たしか、はてなは回答が2回までとの制限があったかとおもいますので、

この質問の続きを別質問で立てまして、一人の回答数を50件までに拡張しました。

http://q.hatena.ne.jp/1226539573

こちらになります。

もし、お時間があいているときがあれば引き続きご教授いただけるとうれしいです。


Option Explicit

Dim html

Dim url, strPostData

url = "http://xxx/xxx.asp"

strPostData = "aaa=あああ"

html = GetHttpResponse("POST", url, strPostData, "Shift_JIS")

Response.Write html

Private Function GetHttpResponse(ByVal methodType, ByVal url, ByVal sendData, ByVal charset)

Const adTypeBinary = 1

Const adTypeText = 2

Const agent = "Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1)"

Dim dst

Set dst = Server.CreateObject("ADODB.Stream")

dst.Open

dst.Type = adTypeBinary

Dim xmlhttp

Set xmlhttp = Server.CreateObject("Msxml2.XMLHTTP")

xmlhttp.Open methodType, url, False

xmlhttp.SetRequestHeader "User-Agent", agent

xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"

xmlhttp.send (sendData)

dst.Write (xmlhttp.responseBody)

dst.Position = 0

dst.Type = adTypeText

dst.charset = charset

GetHttpResponse = dst.ReadText

dst.Close

Set xmlhttp = Nothing

Set dst = Nothing

End Function

2008/11/13 10:27:47
  • id:fester
    質問中からでも、回答数を増やすことができますよ。
    それと、「この質問・回答へのコメントを書く」を質問する際、または、質問途中から開示することができます。既定ですと質問終了になってから開示される仕様だと思います。
    ですので、この、「コメント」を開示する設定にしてもらえると、回答者やその他の方の補足や意見がつくことがあります。
    さて、現状の問題ですが、気づくことがあれば、こちらにコメントしたいと思います。
    ポイントありがとうございました。
  • id:fester
    strPostData = "aaa=" & Server.URLEncode("あああ")
    としてください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません