c++宽字符和多字节字符相互转化类

       多字节字符(multibyte character):每个字符可以是一到多个字节不等,而某个字节序列的字符值由字符串或流(stream)所在的环境背景决定。

       宽字符:对宽字符的支持其实是ANSI C标准的一部分,用以支持多字节表示一个字符。宽字符和Unicode并不完全等同,Unicode只是宽字符的一种编码方式。在ANSI中,一个字符(char)的长度为一个字节(Byte)。使用Unicode时,一个字符占据一个字,C++在wchar.h头文件中定义了最基本的宽字符类型wchar_t :typedef unsigned short wchar_t;

宽字符的使用 :wchar_t *str1=L" 你好Hello";   这个L非常重要,只有带上它,编译器才知道你要将字符串存成一个字符一个字。还要注意,在L和字符串之间不能有空格。

以下提供了了一个宽字符和多字节字符相互转化类:

class StringUnicode

{

public:

   static string FromUnicode(const wstring& str)

   {

      string desc;

      setlocale(LC_ALL,"");     //设置本地默认

      wcstombs(&desc[0],str.c_str(),sizeof(str) * 2);

      setlocale(LC_ALL,"C");     //用完恢复

      return desc.c_str();

   };

   static wstring ToUnicode(const string& str)

   {

      wchar_t* data =new wchar_t[sizeof(str) * 2];

      setlocale(LC_ALL,"");     //设置本地默认

      mbstowcs(data,str.c_str(),sizeof(str) * 2);

      setlocale(LC_ALL,"C");     //用完恢复

 

      wstringtmp(data);

      delete data;

      returnt mp.c_str();

   };

};

标准 C++库中提供的一组多字节字符和宽字符相互转化的API(继承自C库):

mbtowc

Convert multibyte character to wide character (function)

wctomb

Convert wide character to multibyte character (function)

mbstowcs

Convert multibyte string to wide-character string (function)

wcstombs

Convert wide-character string to multibyte string (function)

在下面链接中有对字符集有更详尽的描述:

http://my.oschina.net/alphajay/blog/5691

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章