std::string
само по себе не указывает / не содержит никакой кодировки. Это просто последовательность байтов. То же самое относится к std::wstring
, который является просто последовательностью wchar_t
s (двухбайтовые слова на Win32).
Преобразовав _bstr_t
в char*
с помощью оператора char *, вы просто получите указатель на необработанные данные. Согласно MSDN , эти данные состоят из широких символов, то есть wchar_t
s, которые представляют UTF-16.
Я удивлен, что на самом деле это работает для построения std::string
из этого; вы не должны проходить мимо первого нулевого байта (что произойдет в ближайшее время, если ваша исходная строка будет английской).
Но поскольку wstring
является строкой wchar_t
, вы должны иметь возможность создать ее непосредственно из _bstr_t
следующим образом:
_bstr_t tmp(vtNodeValue);
wstring strValue((wchar_t*)tmp, tmp.length());
(я не уверен насчет length
; это количество байтов или количество символов?) Тогда у вас будет wstring
, закодированный в UTF-16, по которому можно позвонить WideCharToMultiByte
.