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

来源:互联网 发布:阿里云为什么要装linux 编辑:程序博客网 时间:2024/05/15 15:41
       多字节字符(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

 

 

 

原创粉丝点击