MFC unicode字符集与多字节字符集 问题之彻底终结!
Unicode 和多字节字符集 (MBCS) 支持
有些国际市场以大字符集来使用日文和中文等语言。为了支持这些市场的编程,Microsoft 基础类库 (MFC) 支持以两种方式处理大字符集:
unicode和多字节字符集是两种不同的编码方式,不同的编码方式下,所对应的一些函数是不兼容的。
读到多字节菜单字符串之后,用MultiByteToWideChar()转为unicode字符串
或者 使用API的A版本来设置菜单的显示名称,比如,SetMenuItemInfoA(...)
如果你新的库是Unicode的,就用Unicode开发,摒弃多字节编码,多字节编码弊端太多了。
其实改起来很简单,你把所有的char都改成TCHAR,如果能用CString,尽量用CString。所有字符串函数都换上带_t的版本,比如_tsprintf()、_tcscpy之类的……因为这些东西都是同时兼容Unicode和ANSI的,所以改起来很容易。
你只要对于那些少数的多字节dll函数,参数传送字符串时实现用WideCharToMultiByte转换一下。
我们在最开始学习MFC的时候,毫无疑问会遇到这样的问题。
------解决方案--------------------
读到多字节菜单字符串之后,用MultiByteToWideChar()转为unicode字符串
或者 使用API的A版本来设置菜单的显示名称,比如,SetMenuItemInfoA(...)
------解决方案--------------------
如果你新的库是Unicode的,就用Unicode开发,摒弃多字节编码,多字节编码弊端太多了。
其实改起来很简单,你把所有的char都改成TCHAR,如果能用CString,尽量用CString。所有字符串函数都换上带_t的版本,比如_tsprintf()、_tcscpy之类的……因为这些东西都是同时兼容Unicode和ANSI的,所以改起来很容易。
char *str=(LPSTR)(LPCTSTR)strText; //CString转为Char*
参考文献:
https://msdn.microsoft.com/zh-cn/library/cc468203(v=VS.71).aspx
https://msdn.microsoft.com/zh-cn/library/cz0a83sb
ccjt.taobao.com
最新文章
- 前端开发自学之JavaScript——显示当前时间
- Bug跟踪方法
- mysql查看修改字符集
- Virtio:针对 Linux 的 I/O 虚拟化框架
- Tomcat启动过程(三):从SocketProcessor到Container
- 改变WPF ListBoxItem的选中样式
- lintcode:next permutation下一个排列
- iOS预处理指令
- bootstrap 下的 validation插件
- curl 命令详解(转)
- HDU 4570(区间dp)
- AI数据分析(三)
- CodeForces 1143 B. Nirvana
- [UE4]在Character中使用Add Spline Mesh Component,关于Transform.Mobility
- 11gr2 RAC安装INS-35354问题一例
- java+Quartz实现定时任务
- python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字
- CDMA学习
- [转] 在linux下使用Terminator
- hibernate的配置文件,使用XML方式
热门文章
- nyoj 113-字符串替换 (python replace, try ... except)
- 使用Amazon EMR和Apache Hudi在S3上插入,更新,删除数据
- Linux菜鸟——搭建虚拟机环境
- SpringBoot 源码解析 (十)----- Spring Boot的核心能力 - 集成AOP
- 异步任务AsyncTask使用解析
- 小程序api的promise封装
- Nginx热部署 平滑升级 日志切割
- linuxRAID(软)
- 在Spring Security框架下JWT的实现细节原理
- 附011.Kubernetes-DNS及搭建