前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >COleVariant在多字节字符集下的坑

COleVariant在多字节字符集下的坑

作者头像
全栈程序员站长
发布2022-09-09 10:45:27
3350
发布2022-09-09 10:45:27
举报
文章被收录于专栏:全栈程序员必看

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

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

代码语言:javascript
复制
COleVariant var = CStringA("123开始唱");
CStringA str = V_BSTRT(&var);

你会发现,str == “123”,

中文呢?看下COleVariant的构造函数发现:

代码语言:javascript
复制
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”能拿到的,当后面的中文被去掉了。

改下以下去接就正常了:

代码语言:javascript
复制
COleVariant var = CStringA("123开始唱");
CStringW wstr = (wchar_t*)var.bstrVal;
CStringA str = 把unicodz转ansi(wstr)...

这样就可以正常接了。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161078.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档