MSXML2.XMLHTTPでシフトJIS文字をPOSTするには?

解決


ツヨポン  2005-01-13 17:08:34  No: 118882  IP: [192.*.*.*]

過去ログを参考にVB6でプログラムを作りました。
    Dim XMLHTTP As Object
    Dim URL As String
    Dim PostData As Variant

    URL = "http://test.hoge.co.jp/new.php"
    PostData="山田  太郎,ヤマダ  タロウ"
    Set XMLHTTP = CreateObject("MSXML2.XMLHTTP")
    XMLHTTP.Open "POST", URL, False
    XMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    XMLHTTP.send PostData

    PHPのPOSTされたデータを見ると
    '螻ア逕ー縲?螟ェ驛?繝、繝槭ム縲?繧ソ繝ュ繧ヲ'
    と文字化けしております。
    PHP(サーバー)はSJISでコードは統一しています。

    PHPへVB6でSJIS文字列を渡したので教えて下さい。

編集 削除
魔界の仮面弁士  2005-01-13 18:19:33  No: 118883  IP: [192.*.*.*]

>   '螻ア逕ー縲?螟ェ驛?繝、繝槭ム縲?繧ソ繝ュ繧ヲ'
『UTF-8形式のデータを Shift_JIS形式でデコードした時』には、
そのような結果になりますね。

> PHPへVB6でSJIS文字列を渡したので教えて下さい。
「内部処理形式がStringのVariant型」をsendすると、
文字列がUTF-8で送信されます。

この場合はStrConv関数を併用して、sendの引数に、
「内部処理形式がByte配列のVariant型」を渡してみてください。



sendメソッドのヘルプより引用
》 If the input type is a BSTR, the response is always
》 encoded as UTF-8.
(中略)
》 If the input type is a SAFEARRAY of UI1, the response
》 is sent as is without additional encoding. 

上記の BSTR というのは、VBのString型のことです。
"SAFEARRAY of UI1" は、Byte型の配列を意味します。

編集 削除
ツヨポン  2005-01-14 11:42:59  No: 118884  IP: [192.*.*.*]

魔界の仮面弁士さま、情報ありがとうございます。
お教えいただいた内容でテストさせた頂きます。

自己レスです。
シフトJISコードをURLエンコードする関数を書きデータを
渡すことで問題解決することが出来ました。

魔界の仮面弁士さま始め、皆様の今までのお答え、大変役に立ち感謝しております。
皆様ありがとうございました。

編集 削除