ResponseTextの値の文字化け


ベンネーム  2009-06-25 15:13:43  No: 101852  IP: 192.*.*.*

いつも参考にさせていただいております。

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


よろしくお願いします。

編集 削除
魔界の仮面弁士  2009-06-25 16:18:37  No: 101853  IP: 192.*.*.*

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

編集 削除
ベンネーム  2009-06-25 16:28:10  No: 101854  IP: 192.*.*.*

魔界の仮面弁士様

ベンネームでございます。このたびはありがとうございました。
おかげさまで、ご教示いただいたコードで文字化けが解消いたしました。

手探りで進めておりますもので、ResponseTextでしかググっておらず、
お恥ずかしい限りです。精進いたします。

今回ご教示いただいた範囲を学習するには、ADODB.Streamをキーワードに
テキストを探すのがよいでしょうか。重ねがさね恐縮ではございますが、
適当な参考書をご披露いただけましたら、望外です。

編集 削除