WinHttp.WinHttpRequest.5.1 を使用して、サードパーティの Web サービスを呼び出す古い C++ アプリがあります。
問題とは関係ないと思うので、呼び出しシーケンスのすべての詳細をリストすることはしませんが、BSTR 型の を呼び出して終了しhr = pIWinHttpRequest->get_ResponseText(&bstrResponse);
ますbstrResponse
。
呼び出しコードは BSTR では機能せず、標準の C/C++ で機能するため、コードは BSTR をwithchar *
に変換します。char *
_bstr_t b(bstrResponse);
const char *c = static_cast<char *>(b);
そして、このコードでアクセスした以前のすべての Web サービスで、これは機能しました。しかし、この新しいものはそうではありません。
返されるデータは XML であるはずですが、この 1 つの Web サービスについては、文字コード変換の問題が発生しているようです。結果の文字列は次で始まります。"?<?xml version="1.0" encoding="utf-8"?>..."
?
冒頭の余分に注意してください。これをデバッガでbstrResponse
見ていくと、 の表示値には表示されず、 の表示値にも表示されませんが、b
の表示値には表示されますc
。
何が起こっているのかについてのアイデアはありますか?
編集済み
BSTR がマルチバイト型であることは理解していますが、この文字列のすべての文字はプレーン ASCII であり、この関数を呼び出すコードはマルチバイト文字を処理できません。Web をブラウジングすると、この特定のメカニズムが推奨されることがよくありますが、この場合は機能しません。
この文字列を BSTR から 1 バイト文字の配列に変換する必要があります。それが変換できないマルチバイト文字を取り除くことを意味するとしても。