いつも参考にさせていただいております。
htaのコーディングをおこなっております。MSXML2で別の端末にあるcgiプログラムにPOSTでデータを送信し、ResponseTextで実行結果(CGIが吐く登録完了画面)を取得していますが、どうにも文字化けが解消されません。
Set objXMLHTTP=CreateObject("MSXML2.XMLHTTP")
objXMLHTTP.open "POST", strURL, False
objXMLHTTP.Send strPutString
strResult=objXMLHTTP.ResponseText
Wiresharkで見たところ、strResultにはutf-8のデータが入っているようです。「あいうえお」と設定した<TITLE>部分に、「\202\240\202\242\202\244\202\246\202\250」と入っています。
htaファイルはshift_jisでコーディングしており、ResponseTextの値も同様にしたいと思います。ADODB.StreamでCharset=shift_jisとするのではだめなようです。
Set hoge=CreateObject("ADODB.Stream")
hoge.Type=2
hoge.Charset="shift_jis"
hoge.Open
hoge.WriteText strResult
hoge.Position=0
hoge.Type=1
hoge.Position = 3
strResult=hoge.Read()
hoge.Close
Set hoge=Nothing
よろしくお願いします。
ResponseText は、文字コードの判定に制限がありますね。
サーバー側のカスタマイズが可能なら、ResponseXML の方が
文字コードの扱いとしては確実だったりします。
サーバー側に XML を返させることが出来ないのであれば、
responseBody もしくは responseStream を使うことになるでしょう。
ADODB.Stream で変換するのであれば、たとえばこんな感じで。
Set stm = CreateObject("ADODB.Stream")
stm.Type = 1 'バイナリモード
stm.Open
stm.Write objXMLHTTP.responseBody 'バイナリを書き込み
stm.Position = 0 '先頭に戻してから
stm.Type = 2 'テキストモードに変更
stm.Charset = "shift_jis"
strResult = stm.ReadText(-1) 'データ全体を読み込む
stm.Close
Msgbox strResult
魔界の仮面弁士様
ベンネームでございます。このたびはありがとうございました。
おかげさまで、ご教示いただいたコードで文字化けが解消いたしました。
手探りで進めておりますもので、ResponseTextでしかググっておらず、
お恥ずかしい限りです。精進いたします。
今回ご教示いただいた範囲を学習するには、ADODB.Streamをキーワードに
テキストを探すのがよいでしょうか。重ねがさね恐縮ではございますが、
適当な参考書をご披露いただけましたら、望外です。