寬字符:對寬字符的支持其實是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庫):
Convert multibyte character to wide character (function) |
Convert wide character to multibyte character (function) |
Convert multibyte string to wide-character string (function) |
Convert wide-character string to multibyte string (function) |
在下面鏈接中有對字符集有更詳盡的描述:
http://my.oschina.net/alphajay/blog/5691