COleVariant在多字节字符集下的坑

COleVariant在多字节字符集下的坑以下代码(多字节字符集下):COleVariantvar=CStringA("123开始唱");CStringAstr=V_BSTRT(&var);你会发现,str=="123",中文呢?看下COleVariant的构造函数发现:constCOleVariant&COleVariant::operator=(constLPCTSTRlpszSrc){ …

大家好,又见面了,我是你们的朋友全栈君。

以下代码(多字节字符集下):

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.net/161078.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号