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

 

 

 

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