宽字符:对宽字符的支持其实是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