http://www.cnblogs.com/ccjt/p/4320244.html
unicode和多字节字符集是两种不同的编码方式,不同的编码方式下,所对应的一些函数是不兼容的。
读到多字节菜单字符串之后,用MultiByteToWideChar()转为unicode字符串
或者 使用API的A版本来设置菜单的显示名称,比如,SetMenuItemInfoA(...)
如果你新的库是Unicode的,就用Unicode开发,摒弃多字节编码,多字节编码弊端太多了。
其实改起来很简单,你把所有的char都改成TCHAR,如果能用CString,尽量用CString。所有字符串函数都换上带_t的版本,比如_tsprintf()、_tcscpy之类的……因为这些东西都是同时兼容Unicode和ANSI的,所以改起来很容易。
你只要对于那些少数的多字节dll函数,参数传送字符串时实现用WideCharToMultiByte转换一下。
我们在最开始学习MFC的时候,毫无疑问会遇到这样的问题。
VC6的设置:多字节。
vs的默认设置:Unicode,在属性中可以改成多字节。
多字节编码:char,string,CStringA。
Unicode编码:wchar_t,wstring,CStringW。
注意:如果项目是Unicode,那么CString就被定义为CStringW,否则就是CStringA。
附:
LPSTR = char*;LPCSTR = const char*;
LPWSTR = wchar_t*;LPCWSTR = const wchar_t*;
至于LPCTSTR也是根据项目字符集来定义为LPCWSTR(Unicode)或LPCSTR(多字节)。
OK,上面的定义很明显了,注意用的时候别弄混了,我觉得最好的方式是,使用wchar_t和wstring(api大多使用unicode,即使是多字节版本也是把多字节转成unicode再去调用unicode版api),我不太喜欢CString。
接下来就是转换:www.2cto.com
// C++
char* 到 string:string str("char"); 或者string str = "char";
string 到 char*:const char* ch = str.c_str();
wchar_t* 和 wstring与上相同。
// MFC
char* 到 CStringA:CStringA str("char");
CStringA 到 char*:const char* ch = str.operator LPCSTR(); (注意:反对使用GetBuffer,因为使用这个,必须要ReleaseBuffer,而且很多时候没必要去分配空间)
wchar_t* 和 CStringW与上相同。
// 字符集之间转换
char* 到 wchar_t*:CA2W a2w("char"); const wchar_t* wch = a2w.operator LPCWSTR();
wchar_t* 到 char*:CW2A w2a(L"wchar_t"); const char* ch = w2a.operator LPCSTR(); (注意:反对使用_T("chs")这种方式,程序字符集在一开始就该确定,而且最好选择Unicode)
关于CA2W和CW2A这两个类,可以在atlconv.h中找到源代码,其实就是对WideCharToMultiByte和MultiByteToWideChar的封装。
http://bbs.esrichina-bj.cn/ESRI/thread-97480-1-1.html
------解决方案--------------------
读到多字节菜单字符串之后,用MultiByteToWideChar()转为unicode字符串
或者 使用API的A版本来设置菜单的显示名称,比如,SetMenuItemInfoA(...)
------解决方案--------------------
如果你新的库是Unicode的,就用Unicode开发,摒弃多字节编码,多字节编码弊端太多了。
其实改起来很简单,你把所有的char都改成TCHAR,如果能用CString,尽量用CString。所有字符串函数都换上带_t的版本,比如_tsprintf()、_tcscpy之类的……因为这些东西都是同时兼容Unicode和ANSI的,所以改起来很容易。
char *str=(LPSTR)(LPCTSTR)strText; //CString转为Char*
char * ch_a =(char*)str.GetBuffer(str.GetLength());
参考文献:
https://msdn.microsoft.com/zh-cn/library/cc468203(v=VS.71).aspx
https://msdn.microsoft.com/zh-cn/library/cz0a83sb
ccjt.taobao.com
Unicode 和多字节字符集 (MBCS) 支持相关推荐
- UNICODE与多字节字符集等字符问题
VS2008默认的字符集是Unicode,而VC6.0默认是多字节字符集,Unicode字符集你要加_T("")或L"",你也可以" 工程-属性-修改 ...
- unicode和MBCS(多字节字符集)的关系
unicode和MBCS(多字节字符集)的关系 多了,先转载过来,供大家分享. 转载地址:http://my.oschina.net/alphajay/blog/5691 ************** ...
- 转:Unicode字符集和多字节字符集关系
原文地址: http://my.oschina.net/alphajay/blog/5691 unicode.ucs-2.ucs-4.utf-16.utf-32.utf-8 http://stallm ...
- Unicode字符集和多字节字符集关系(一)
另外可参考: 谈谈Unicode编码,简要解释UCS.UTF.BMP.BOM等名词 http://blog.csdn.net/smonster/archive/2008/10/31/3194587.a ...
- 单字节字符集,多字节字符集,Unicode
我们在这里介绍一下字符类型.这里有3种编码模式对应3种字符类型. 第一种编码类型是单子节字符集(single-byte character set or SBCS).在这种编码模式下, ...
- VS2005 宽字符 unicode字符集和多字节字符集
在vs2005以前版本的vs默认使用多字节字符集,而vs2005默认使用unicode字符集,这会使一些代码不能编译通过 其区别如下 unicode字符集 void Point::output(int ...
- oracle支持utf8字符集,AL32UTF8/UTF8(Unicode)数据库字符集含义
AL32UTF8/UTF8(Unicode)数据库字符集含义 (Doc ID 1946289.1) Last updated on FEBRUARY 03, 2019 适用于: Oracle Data ...
- 多字节字符集与Unicode字符集(CString char*和wchar_t* 容易出错的原因)
1.基本概念 2.L与_T 3.char TCHAR 与 wchar_t,strcpy wcscpy与_tcscpy 4.LPSTR,LPCSTR,LPTSTR,LPCTSTR,LPWSTR,LPCW ...
- AL32UTF8/UTF8(Unicode)数据库字符集含义 (文档 ID 1946289.1)
AL32UTF8/UTF8(Unicode)数据库字符集含义 (文档 ID 1946289.1) 适用于: Oracle Database Cloud Schema Service - 版本 N/A ...
最新文章
- 当写了五百行代码忘记保存时…… | 每日趣闻
- oracle取字符串长度的函数length()和hengthb()
- linux的oracle最低配置,Oracle Linux的系统配置和限制
- Jupyter Notebook 常用的快捷键
- maven项目多模块部署的时候构建顺序
- 机器学习之线性回归的改进-岭回归
- inline-block和float
- 世界主要国家货币名称列表整理[外贸免费工具]
- android高仿苹果计算器,安卓仿苹果计算器(内附完整源码)要点解析.docx
- shell 值判断,大于0,等于0,小于0,大于等于0,小于等于0,不等于0
- Java入门数据类型转换(羊驼)
- 2020-02-18
- oracle去掉0x00,Oracle O001 / O00n 进程 100% CPU资源耗用
- Excel在数字单元格后面怎么添加统一的内容(数字或其他内容)
- java @around_解决@Around对静态方法不生效的问题
- Word-1:使用poi-tl引擎导出word文档
- centos彻底卸载mysql
- 转帖:Apache Commons实用工具
- Tizen与鸿蒙,被忽视的对手:三星的自研系统,已全球第一,成华为鸿蒙对手
- greenplum6数据库安装部署以及扩容介绍
热门文章
- 使用Jquery、HTML、CSS、JS实现下拉菜单列表
- 英文翻译法语-英文法语翻译软件
- 51信用卡2018校园招聘编程题学习
- Consul 基本概念,同类比较和内部原理
- P1386 座位安排
- 我的世界mypet插件 v1.7.1
- 压缩视频大小画质不变,视频压缩大小清晰度不变怎么做?
- JavaScript(WebAPI)
- 本地生活商家和达人注意了,如何提高核销率
- CCPC 2050 万人编程竞赛热身赛:1001 赶火车