mbcs编码和unicode编码的相互转换

mbcs编码和unicode编码的相互转换

ID:8978062

大小:50.00 KB

页数:5页

时间:2018-04-13

mbcs编码和unicode编码的相互转换_第1页
mbcs编码和unicode编码的相互转换_第2页
mbcs编码和unicode编码的相互转换_第3页
mbcs编码和unicode编码的相互转换_第4页
mbcs编码和unicode编码的相互转换_第5页
资源描述:

《mbcs编码和unicode编码的相互转换》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、MBCS编码和UNICODE编码的相互转换今天写的一段代码涉及到MBCS编码和UNICODE编码的相互转换,查了一下MSDN的相关资料,整理如下:    在VC6中,默认使用MBCS编码,即多字节字符,实际就是支持大于0x80的ASCII码。这样,一个中文字可以表示为2个字节,GB2312就是这样表示的。    VC6的默认安装是不带UNICODE库的,要在VC6中写UNICODE程序,必须安装CRT和MFC的Unicode库。    要使你的程序支持Unicode,要在你的项目属性中去掉"_MBCS"宏定义,增加"UNICODE"和"_UNICODE"两个宏定义。(注意

2、,这两个都应该加上,因为CRT和MFC使用UNICODE定义,而STL则使用_UNICODE)    如果你的程序是MFC的,则Unicode版MFC库的入口点是wWinMainCRTStartup。    为了方便开发者,VC6中提供了Tchar.h,里面定义了一些宏用来帮助写两种编码都兼容的代码。    类型一般文本数据类型名称_UNICODE和_MBCS未定义_MBCS已定义_UNICODE已定义_TCHARcharcharwchar_t_TINTintintwint_t_TSCHARsignedcharsignedcharwchar_t_TUCHARunsigne

3、dcharunsignedcharwchar_t_TXCHARcharunsignedcharwchar_t_T或_TEXT无效(由预处理器移除)无效(由预处理器移除)L(将后面的字符或字符串转换成相应的Unicode形式)    CRT中的相关函数在Tchar.h中都定义了相应的替代,基本是将str换成了_tcs,比如:CRT中的unsignedintstrlen(constchar*)现在是unsignedint_tcslen(constTCHAR*),在Uniocde时,将被替换为unsignedint_wcslen(constwchar_t)*,而在MBCS时,会

4、被替换为unsignedint_mcslen(constchar*)。    看,写Unicode和MBCS兼容的代码挺容易的吧,我总结了一些替换规则    1将char换成TCHAR(unsignedchar必须去掉unsigned)    2将str函数换成_tcs函数    3将字符串常量定义加要_T("")宏    4printf函数族必须修改为wprintf,不过要注意千万不要使用wprintf函数来解析char型    很多时候程序中既需要Unicode,又需要使用ASCII,这时需要用到操作系统的2个API    WideCharToMultiByte用来将

5、Unicode字符串转化为MBCS的    MultiByteToWideChar用来将MBCS字符串转化为Unicode的    一些注意事项:    在Unicode编码下,sizeof没那么可靠了,memset(,0,sizeof())的习惯用法可能会出大错,改成memset(,0,sizeof()/szieof(TCHAR))就没事了,呵呵    在Unicode下,一个中文字符就是一个字符,len=strlen()/2;这样可不行了用VC6进行UNICODE编程最近试图将自己的程序编译成Unicode版本,费了不少力气,相关内容整理如下,适用于VC6,但VC7、

6、VC8应该也差不多的(后者新建项目缺省即按Unicode编译)。1.添加UNICODE和_UNICODE预处理定义位置:ProjectSettings->C/C++->Preprocessordefinitions添加了这两个定义后,MFC的一些内置类型如TCHAR、CString都将转为支持宽字符类型(wchar_t)2.使用宽字符相关类型,如:char->TCHAR、char*->LPTSTR、constchar*->LPCTSTR3.对字符串常量使用_T()宏4.替换C库中的中字符串操作函数,如strlen->_tcslen、strcmp->_tcscmp等类似的还

7、有C库中字符串与数字的转换函数,如atoi->_ttoi、itoa->_itot等5.将ProjectSettings->Link->Output->EntryPoint设为wWinMainCRTSTartup否则会有如下错误:msvcrtd.lib(crtexew.obj):errorLNK2001:unresolvedexternalsymbol_WinMain@166.C++标准库中的string,有对应的宽字符版本wstring,两者均为basic_string的特化版本可在StdAfx.h中:#ifdef_UNICO

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。