字符与编码
来源:互联网 发布:游戏地图制作软件 编辑:程序博客网 时间:2024/05/20 07:34
摘自:白乔, 左飞. 把脉VC++. 2009年7月. P176, P183~187.
1. 概念
- 多字节字符集:MBCS,Multi-Bytes Charecter Set,是一种不同长度混排的编码方法。这种编码被称为GB2312,与ASCII码兼容。如:"中文ABC"所占的字节数是 2*2+3 = 7。
- 宽字节字符:使用UNICODE编码进行存放的字符。
2. 转换
- mbtowc:将多字节字符转换成wchar_t;
- wctomb:将wchar_t转换成多字节字符;
- mbstowcs:将多字节字符串转换成wchar_t字符串;
- wcstombs:将wchar_t字符串转换成多字节字符串。
注:头文件是stdlib.h或cstdlib;
除mbtowc外,其它都有对应的_s版本,应使用_s版。
UNICODE字符集和MBCS字符集之间的转换方法还可以利用Windows提供的转换函数WideCharToMultiByte()和MultiByteToWideChar()来完成。函数原型如下:
WideCharToMultiByte()用来将宽字节字符转换成MBCS,MultiByteToWideChar()用来将MBCS转换成宽字符。通常情况下,可能开始并不知道转换之后的字符串会占用多大的字节,这时可以将参数cbMultiByte置为0 ,预先调用一次WideCharToMultiByte()和MultiByteToWideChar(),它们的返回值即为目标字符串的字节大小,然后再利用该大小作为参数cbMultiByte,再次调用函数即可。
此外,也可以用_bstr_t类来实现字符编码的转换。_bstr_t的构造函数如下:
可以看出,_bstr_t同时支持 char* 和 wchar_t* 类型。_bstr_t提供了如下转换操作符函数:
示例代码:
3. 编写通用的程序
- 在编程的时候使用TCHAR数据类型,此类型能够根据预编译宏的定义,将其转换为ANSI或者是Unicode;
- 预编译宏_MBCS、_UNICODE和UNICODE。_MBCS是多字节和ANSI字符串的编译宏,此时TCHAR将转换为char。_UNICODE和UNICODE是Unicode编码的预编译宏,TCHAR将转换为wchar_t;
- _UNICODE和UNICODE与_MBCS不能在编译的时候同时被定义;
- _UNICODE宏用于C运行期库的头文件,UNICODE宏用于Windows头文件,一般同时定义这两个宏。
- 文件编码与字符编码
- Unicode 与 字符编码
- 字符与编码
- 字符与UNICODE编码
- 字符与编码
- 字符与编码
- 字符编码与字符集
- 字符编码与乱码
- 字符编码与汉字编码
- 字符集与字符编码
- 字符集与字符编码
- 字符集与字符编码
- 字符集与字符编码
- 字符与编码
- 字符与编码
- 字符集与字符编码
- 字符集与字符编码
- 字符集与字符编码
- Hex 文件格式说明
- asp.net中设置label.text居中
- F#程序设计-F#语言基础之函数(1)
- 中国动漫何时才能好起来?
- Enter转Tab,跨过只读属性的控件
- 字符与编码
- armlink使用方法详解
- 对象的延迟创建与多线程安全访问
- 使用内存映射文件实现进程通讯
- 在.NET中使用Newtonsoft.Json转换,读取,写入
- IIS架构与HTTP请求处理流程
- 1207 AddConnectableRcs,可连接资源的变量,使用队列进行深度控制
- 培训经历和培训现状,供开发人员参考
- 相信自己