我们有一个使用 WinHttp.WinHttpRequest.5.1 调用第三方 Web 服务的旧 C++ 应用程序。
我不会列出调用序列的所有细节,因为我认为它与问题无关,但我们通过调用结束hr = pIWinHttpRequest->get_ResponseText(&bstrResponse);
,其中bstrResponse
是 BSTR 类型。
调用代码不适用于 BSTR,它适用于标准 C/C++ char *
,因此代码将 BSTR 转换为 a char *
:
_bstr_t b(bstrResponse);
const char *c = static_cast<char *>(b);
对于我们使用此代码访问的所有先前的 Web 服务,这已经奏效了。但对于这个新的,它不是。
我们返回的数据应该是 XML,但是对于这个 web 服务,看起来我们遇到了一些字符代码转换问题。我们得到的字符串以;"?<?xml version="1.0" encoding="utf-8"?>..."
?
注意开头的额外内容。在调试器中遍历此内容时,我们在的显示值bstrResponse
中看不到它,在 的显示值中b
也看不到它,但在 的显示值中确实看到了它c
。
关于可能发生什么的任何想法?
已编辑
我知道BSTR是多字节类型,但是这个字符串中的所有字符都是纯ASCII,调用这个函数的代码没有一个可以处理多字节字符。浏览网页,我看到经常推荐这种特定机制,但在这种情况下,它不起作用。
我需要将此字符串从 BSTR 转换为单字节字符数组。即使这意味着去除无法转换的多字节字符。