我們使用WinHttp.WinHttpRequest.5.1調用第三方Web服務的舊C++應用程序。將BSTR轉換爲char的問題*
我不會列出呼叫順序的所有細節,因爲我不認爲它與問題有關,但我們通過呼叫hr = pIWinHttpRequest->get_ResponseText(&bstrResponse);
完成,其中bstrResponse
是BSTR類型。
調用代碼不BSTRs工作,其工作原理與標準的C/C++ char *
的,所以代碼的BSTR轉換爲char *
有:
_bstr_t b(bstrResponse);
const char *c = static_cast<char *>(b);
而且所有之前的WebServices我們已經用這段代碼訪問過,這個工作。但對於這個新的,它不是。
我們找回的數據應該是XML,但對於這一個Web服務,它看起來像我們正在得到一些字符代碼轉換問題。我們的結果字符串以; "?<?xml version="1.0" encoding="utf-8"?>..."
注意額外的?
開頭。在調試器中瀏覽時,我們沒有看到顯示值爲bstrResponse
,我們沒有在顯示的值b
中看到它,但我們確實在顯示的值c
中看到它。
關於可能發生什麼的任何想法?
EDITED
我明白,BSTR是一個多字節類型,但都在這個字符串中的字符是純ASCII,並沒有調用該函數可以處理多字節字符的代碼。瀏覽網頁時,我經常看到這種特定的機制,但在這種情況下,它不起作用。
我需要將此字符串從BSTR轉換爲單字節字符數組。即使這意味着刪除無法轉換的多字節字符。
它不起作用,因爲BSTR不是一個字節長度字符串。我詳細介紹了你[這個問題](http://stackoverflow.com/questions/6284524/bstr-to-stdstring-stdwstring-and-vice-versa)。 –
你可能認爲'static_cast'可能不是將任意類型轉換爲可打印'char *'字符串的有效方法嗎? ;) – jalf
我明白BSTR是一個多字節類型,但是這個字符串中的所有字符都是純ASCII,並且沒有任何調用此函數的代碼可以處理多字節字符。 –