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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • LAN8720A网络模块关于时钟的使用问题「建议收藏」

    LAN8720A网络模块关于时钟的使用问题「建议收藏」微雪的LAN8720A驱动电路:正点原子LAN8720A驱动电路:1、nINTSELConfiguration从原理图中可以看出正点原子的LAN8720A模块所使用的晶振是25M,而微雪的LAN8720A模块使用的晶振是50M,根据数据手册和结合原理图可以看出,微雪的LAN8720A的nINTSEL没有接下拉,则是默认使用内部上拉到高电平,即nINTSEL=1,为REF_CLKInMode模式,所以选用50M的晶振。…

    2022年6月22日
    155
  • mybatis的常用动态sql标签

    mybatis的常用动态sql标签一.定义sql语句select标签属性介绍:id:唯一的标识符.parameterType:传给此语句的参数的全路径名或别名例:com.test.poso.User或userresultType:语句返回值类型或别名。注意,如果是集合,那么这里填写的是集合的泛型,而不是集合本身(resultType与resultMap不能并用)<selectid=…

    2022年6月23日
    147
  • 递归算法php,php递归算法经典实例「建议收藏」

    递归算法php,php递归算法经典实例「建议收藏」PHP递归算法就是函数调用函数了操作非常的简单了,我们下面来给各位介绍PHP递归算法及实际的一些关于递归的用法。递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行,可能这样给大家讲解,还是很难明白,直接上例子functiontest($n){echo$n.”…

    2022年8月11日
    9
  • springcloudfeign原理面试题_微服务feign作用

    springcloudfeign原理面试题_微服务feign作用Feign原理简述启动时,程序会进行包扫描,扫描所有包下所有@FeignClient注解的类,并将这些类注入到spring的IOC容器中。当定义的Feign中的接口被调用时,通过JDK的动态代理来生成RequestTemplate。 RequestTemplate中包含请求的所有信息,如请求参数,请求URL等。 RequestTemplate声明Request,然后将Request交给cl…

    2022年9月26日
    3
  • 为Eclipse指定Java VM[通俗易懂]

    重装系统后,Eclipse无法启动,说找不到JavaVM.   网上搜了一下,解决方法如下:   创建快捷方式,右键快捷方式,打开属性.在目标处输入” -vm你的Java根目录\jre\bin\javaw.exe”.然后用快捷方式打开就可以了.

    2022年4月12日
    106
  • MySQL基础 — 常用命令

    MySQL基础 — 常用命令一、连接MySQL格式:mysql-h主机地址-u用户名-p用户密码1、连接到本机上的MySQL。        首先在打开cmd窗口,输入mysql-uroot-p,然后空格进入MySQL模式,MySQL的提示符是:mysql&gt;。mysql-uroot-p#如果刚安装好MySQL,root是没有密码的2、连接到远程主机上的MySQL。        假设远程主机的IP…

    2022年6月15日
    28

发表回复

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

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