大家好,又见面了,我是你们的朋友全栈君。
以下代码(多字节字符集下):
COleVariant var = CStringA("123开始唱");
CStringA str = V_BSTRT(&var);
你会发现,str == “123”,
中文呢?看下COleVariant的构造函数发现:
const COleVariant& COleVariant::operator=(const LPCTSTR lpszSrc)
{
// Free up previous VARIANT
Clear();
vt = VT_BSTR;
if (lpszSrc == NULL)
bstrVal = NULL;
else
{
bstrVal = CTempStringW(lpszSrc).AllocSysString();
}
return *this;
}
看到没?无论你传ansi或unicode的源字符串进去,最终都被作为unicode存储,在取出来的时候,当然取得的是unicode的字符串,当使用CStringA str = V_BSTRT(&var);去接时,前面的“123”能拿到的,当后面的中文被去掉了。
改下以下去接就正常了:
COleVariant var = CStringA("123开始唱");
CStringW wstr = (wchar_t*)var.bstrVal;
CStringA str = 把unicodz转ansi(wstr)...
这样就可以正常接了。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161078.html原文链接:https://javaforall.cn