字符与编码

来源:互联网 发布:游戏地图制作软件 编辑:程序博客网 时间: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头文件,一般同时定义这两个宏。
原创粉丝点击