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) 支持相关推荐

  1. UNICODE与多字节字符集等字符问题

    VS2008默认的字符集是Unicode,而VC6.0默认是多字节字符集,Unicode字符集你要加_T("")或L"",你也可以" 工程-属性-修改 ...

  2. unicode和MBCS(多字节字符集)的关系

    unicode和MBCS(多字节字符集)的关系 多了,先转载过来,供大家分享. 转载地址:http://my.oschina.net/alphajay/blog/5691 ************** ...

  3. 转:Unicode字符集和多字节字符集关系

    原文地址: http://my.oschina.net/alphajay/blog/5691 unicode.ucs-2.ucs-4.utf-16.utf-32.utf-8 http://stallm ...

  4. Unicode字符集和多字节字符集关系(一)

    另外可参考: 谈谈Unicode编码,简要解释UCS.UTF.BMP.BOM等名词 http://blog.csdn.net/smonster/archive/2008/10/31/3194587.a ...

  5. 单字节字符集,多字节字符集,Unicode

    我们在这里介绍一下字符类型.这里有3种编码模式对应3种字符类型. 第一种编码类型是单子节字符集(single-byte   character   set   or   SBCS).在这种编码模式下, ...

  6. VS2005 宽字符 unicode字符集和多字节字符集

    在vs2005以前版本的vs默认使用多字节字符集,而vs2005默认使用unicode字符集,这会使一些代码不能编译通过 其区别如下 unicode字符集 void Point::output(int ...

  7. oracle支持utf8字符集,AL32UTF8/UTF8(Unicode)数据库字符集含义

    AL32UTF8/UTF8(Unicode)数据库字符集含义 (Doc ID 1946289.1) Last updated on FEBRUARY 03, 2019 适用于: Oracle Data ...

  8. 多字节字符集与Unicode字符集(CString char*和wchar_t* 容易出错的原因)

    1.基本概念 2.L与_T 3.char TCHAR 与 wchar_t,strcpy wcscpy与_tcscpy 4.LPSTR,LPCSTR,LPTSTR,LPCTSTR,LPWSTR,LPCW ...

  9. AL32UTF8/UTF8(Unicode)数据库字符集含义 (文档 ID 1946289.1)

    AL32UTF8/UTF8(Unicode)数据库字符集含义 (文档 ID 1946289.1) 适用于: Oracle Database Cloud Schema Service - 版本 N/A ...

最新文章

  1. 当写了五百行代码忘记保存时…… | 每日趣闻
  2. oracle取字符串长度的函数length()和hengthb()
  3. linux的oracle最低配置,Oracle Linux的系统配置和限制
  4. Jupyter Notebook 常用的快捷键
  5. maven项目多模块部署的时候构建顺序
  6. 机器学习之线性回归的改进-岭回归
  7. inline-block和float
  8. 世界主要国家货币名称列表整理[外贸免费工具]
  9. android高仿苹果计算器,安卓仿苹果计算器(内附完整源码)要点解析.docx
  10. shell 值判断,大于0,等于0,小于0,大于等于0,小于等于0,不等于0
  11. Java入门数据类型转换(羊驼)
  12. 2020-02-18
  13. oracle去掉0x00,Oracle O001 / O00n 进程 100% CPU资源耗用
  14. Excel在数字单元格后面怎么添加统一的内容(数字或其他内容)
  15. java @around_解决@Around对静态方法不生效的问题
  16. Word-1:使用poi-tl引擎导出word文档
  17. centos彻底卸载mysql
  18. 转帖:Apache Commons实用工具
  19. Tizen与鸿蒙,被忽视的对手:三星的自研系统,已全球第一,成华为鸿蒙对手
  20. greenplum6数据库安装部署以及扩容介绍

热门文章

  1. 使用Jquery、HTML、CSS、JS实现下拉菜单列表
  2. 英文翻译法语-英文法语翻译软件
  3. 51信用卡2018校园招聘编程题学习
  4. Consul 基本概念,同类比较和内部原理
  5. P1386 座位安排
  6. 我的世界mypet插件 v1.7.1
  7. 压缩视频大小画质不变,视频压缩大小清晰度不变怎么做?
  8. JavaScript(WebAPI)
  9. 本地生活商家和达人注意了,如何提高核销率
  10. CCPC 2050 万人编程竞赛热身赛:1001 赶火车