- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MBCS编码和UNICODE编码的相互转换
今天写的一段代码涉及到MBCS编码和UNICODE编码的相互转换,查了一下MSDN的相关资料,整理如下:
???? 在VC6中,默认使用MBCS编码,即多字节字符,实际就是支持大于0x80的ASCII码。这样,一个中文字可以表示为2个字节,GB2312就是这样表示的。
???? VC6的默认安装是不带UNICODE库的,要在VC6中写UNICODE程序,必须安装CRT和MFC的Unicode库。
???? 要使你的程序支持Unicode,要在你的项目属性中去掉_MBCS宏定义,增加UNICODE和_UNICODE两个宏定义。(注意,这两个都应该加上,因为CRT和MFC使用UNICODE定义,而STL则使用_UNICODE)
???? 如果你的程序是MFC的,则Unicode版MFC库的入口点是wWinMainCRTStartup。
???? 为了方便开发者,VC6中提供了Tchar.h,里面定义了一些宏用来帮助写两种编码都兼容的代码。
???? 类型
一般文本
数据类型名称
_UNICODE 和 _MBCS 未定义
_MBCS 已定义
_UNICODE 已定义
_TCHAR
char
char
wchar_t
_TINT
int
int
wint_t
_TSCHAR
signed char
signed char
wchar_t
_TUCHAR
unsigned char
unsigned char
wchar_t
_TXCHAR
char
unsigned char
wchar_t
_T 或 _TEXT
无效(由预处理器移除)
无效(由预处理器移除)
L(将后面的字符或字符串转换成相应的 Unicode 形式)
???? CRT中的相关函数在Tchar.h中都定义了相应的替代,基本是将str换成了_tcs,比如:CRT中的unsigned int strlen(const char *)现在是unsigned int _tcslen(const TCHAR*),在Uniocde时,将被替换为unsigned int _wcslen(const wchar_t)*,而在MBCS时,会被替换为unsigned int _mcslen(const char*)。
???? 看,写Unicode和MBCS兼容的代码挺容易的吧,我总结了一些替换规则
???? 1 将char换成TCHAR (unsigned char必须去掉unsigned)
???? 2 将str函数换成_tcs函数
???? 3 将字符串常量定义加要_T()宏
???? 4 printf函数族必须修改为wprintf,不过要注意千万不要使用wprintf函数来解析char型
???? 很多时候程序中既需要Unicode,又需要使用ASCII,这时需要用到操作系统的2个API
???? WideCharToMultiByte用来将Unicode字符串转化为MBCS的
???? MultiByteToWideChar用来将MBCS字符串转化为Unicode的
???? 一些注意事项:
???? 在Unicode编码下,sizeof没那么可靠了,memset( ,0, sizeof())的习惯用法可能会出大错,改成memset(,0,sizeof()/szieof(TCHAR))就没事了,呵呵
???? 在Unicode下,一个中文字符就是一个字符,len = strlen() / 2;这样可不行了
用VC6进行UNICODE编程
最近试图将自己的程序编译成Unicode版本,费了不少力气,相关内容整理如下,适用于VC6,但VC7、VC8应该也差不多的(后者新建项目缺省即按Unicode编译)。
1. 添加 UNICODE 和 _UNICODE 预处理定义
位置:Project Settings - C/C++ - Preprocessor definitions
添加了这两个定义后,MFC的一些内置类型如 TCHAR、CString 都将转为支持宽字符类型(wchar_t)
2. 使用宽字符相关类型,如:
char - TCHAR、char * - LPTSTR、const char * - LPCTSTR
3. 对字符串常量使用 _T() 宏
4. 替换C库中的中字符串操作函数,如 strlen - _tcslen、strcmp - _tcscmp 等
类似的还有C库中字符串与数字的转换函数,如 atoi - _ttoi、itoa - _itot 等
5. 将 Project Settings - Link - Output - Entry Point 设为 wWinMainCRTSTartup
否则会有如下错误:
您可能关注的文档
- 密云县2008年初三毕业暨升学一模考试.doc
- 免费资料,无私奉献!《陈涉世家》全面复习.doc
- 免费资料_无私奉献!《陈涉世家》全面复习 - 副本.doc
- 免费资料_无私奉献!《陈涉世家》全面复习无答案.doc
- 面试试题集锦(第四集).doc
- 名篇名句默写练习(一).doc
- 名思教育小学语文五年级下学期期中质量检测.doc
- 名校八下语文第五单元能力测试.doc
- 名著阅读 (1).doc
- 魔耳英语期中测试.doc
- 2024年头灯资金筹措计划书代可行性研究报告.docx
- 2024年澳代巴豆酸乙酯资金需求报告代可行性研究报告.docx
- 2024年水污染防治设备资金筹措计划书代可行性研究报告.docx
- 2024年纸卷包装输送系统资金申请报告代可行性研究报告.docx
- 2024年湿疹药物资金申请报告代可行性研究报告.docx
- 2024年家用通风电器具资金筹措计划书代可行性研究报告.docx
- 2024年数字模拟混合输出仪表通讯模板资金申请报告代可行性研究报告.docx
- 2024年计算器及货币专用设备资金需求报告代可行性研究报告.docx
- 2024年手工制纸及纸板项目投资申请报告代可行性研究报告.docx
- 2024年抗生素类药物资金筹措计划书代可行性研究报告.docx
文档评论(0)