使用 “Unicode 字符集 ” 使用错误,应该使用 “使用多字节字符集”

“void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)”: 不能将参数 1 从“const char [29]”

出现上面的问题,应该使用多字节字符集

案例地址,百度知道引用

问题:

“void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)

CString strDate,strTime;	SYSTEMTIME st;                         //获取本地时间	GetLocalTime(&st);	strDate.Format("%4d-%2d-%2d",st.wYear,st.wMonth,st.wDay);	strTime.Format("【%4d:%2d:%2d】",st.wHour,st.wMinute,st.wSecond);	GetDlgItem(IDC_STATIC_Time)->SetWindowText(strDate + strTime);

	SetTimer(1,1000,NULL);	return TRUE;

error C2664: “void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)”: 不能将参数 1 从“const char [12]”转换为“const wchar_t *”1>生成失败。

回答:
你用的是VC2005或者更高的版本吧?VC2005及更高版本默认使用Unicode字符集,CString里存的是宽字符,也就是wchar_t,而不再是char。你可以这么写:strDate.Format(_T("%4d-%2d-%2d"),st.wYear,st.wMonth,st.wDay);strTime.Format(_T("%4d:%2d:%2d"),st.wHour,st.wMinute,st.wSecond);以后写程序的时候,定义字符串变量,不要用char*,而用TCHAR*。所有字符串常量,不要直接用"",而要用_T("")。举个例子:TCHAR* str = _T( "Hello, World" );MessageBox( _T( "Hello" )); 当然,我上面说的是在MFC里面。写控制台程序的话,就不用了。
				
时间: 2024-10-12 17:17:29

使用 “Unicode 字符集 ” 使用错误,应该使用 “使用多字节字符集”的相关文章

多字节字符集与Unicode字符集

在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset). 多字节字符集: 在最初的时候,Internet上只有一种字符集——ANSI的ASCII字符集,它使用7 bits来表示一个 字符,总共表示128个字符,其中包括了 英文字母.数字.标点符号等常用字符.之后,又进行扩展,使用8 bits表示一个字符,可以表示256个字符,主要在原来的7 bits字符集的基础上加入了一些特殊符号.后来,由于各国语言的加入,

通过编写串口助手工具学习MFC过程&mdash;&mdash;(三)Unicode字符集的宽字符和多字节字符转换

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (三)Unicode字符集的宽字符和多字节字符转换 在上一节<(二)通过&qu

Unicode字符集和多字节字符集关系(转载)

Unicode字符集和多字节字符集关系 原文链接:http://blog.csdn.net/stephen1315/article/details/ 在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset).      在最初的时候,Internet上只有一种字符集——ANSI的ASCII字符集,它使用7 bits来表示一个字符,总共表示128个字符,其中包括了英文字母.数字.标点符号等常用字符.之后,又进行扩

MFC unicode字符集与多字节字符集 问题之彻底终结!

Unicode 和多字节字符集 (MBCS) 支持 Visual Studio .NET 2003 有些国际市场以大字符集来使用日文和中文等语言.为了支持这些市场的编程,Microsoft 基础类库 (MFC) 支持以两种方式处理大字符集: Unicode 多字节字符集 (MBCS) unicode和多字节字符集是两种不同的编码方式,不同的编码方式下,所对应的一些函数是不兼容的. 读到多字节菜单字符串之后,用MultiByteToWideChar()转为unicode字符串 或者 使用API的A

Unicode和多字节字符集 (MBCS) 杂谈

这个估计是很多人曾经头疼过的问题,现在的VC版本基本都支持Unicode和多字节字符集 (MBCS),在进行MFC编程时VC的默认设置是unicode字符集.但是我们通常需要做一些代码移植的工作,如果将多字节字符集下的程序代码移植到unicode字符集环境中,就需要针对此做出很多类型的转换,反之亦然. 首先,了解一下unicode和多字符字符集(MBSS)的区别: 在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(cha

使用多字节字符集的跨平台(PC、Android、IOS、WP)编码/解码方法

随着移动端的发展,跨平台已成为通讯架构设计的重要考虑因素,PC.Android.IOS.WP等跨多平台间的数据通讯,必然要解决字符编码/解码的问题. 多字节字符集MBCS不是跨平台的首选字符集,面向跨平台.国际化的推荐字符集肯定是UNICODE. 写VC的人都知道,在以前VC++6.0中默认的字符集是多字节字符集,而VS2005及以后默认的字符集是Unicode,VS2013中默认不再对多字节字符串进行支持. 但对很多较早的服务端项目,依然使用的是多字节字符集,不过使用多字节字符集依然可以实现跨

std::string在多字节字符集环境下substr的实现方法

昨天写到<使用多字节字符集的跨平台(PC.Android.IOS.WP)编码/解码方法>中提到服务端使用std::string处理字符串,std::string对多字节字符集支持并不是很完善,std::string中的函数没有对多字节字符集进行直接的支持. 例如直接调用std::string的substr函数,就会导致某些情况下截取的字符串尾部产生非法字符. GB系列多字节字符集基础知识: VC环境下工程设置为多字节字符集,默认使用的是GBK编码,GB2312.GBK.GB18030,这3个都

MySQL多字节字符集造成主从数据不一致问题

问题产生线上一直有个历史遗留问题,最近DBA提了出来,所以跟了下代码,作了下简单分析,问题描述如下:在master-slave的环境下,对master上的某个表中的数据插入,会导致master-slave数据不一致的情况,通过反复试验,确定出现该情况的条件如下: master上设置了character_set_server=gbk 应用中采用了prepared statement并且设置了useCursorFetch=true 对于master上某个表中的int字段,采用了字符的形式进行插入 比

Oracle字符集的查看查询和Oracle字符集的设置修改

本文主要讨论以下几个部分:如何查看查询oracle字符集. 修改设置字符集以及常见的oracle utf8字符集和oracle exp 字符集问题. 一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台. 影响Oracle数据库字符集最重要的参数是NLS_LANG参数.