char:一个字节8bit表示,最多表示256个字符,表示和用来处理ASCII字符集,国际通用
wchar_t:多字节字符表示,典型2个字节或者4个字节,如GNU libc中为4B,可以表示更多的字符,满足国际化应用开发的需求,实现标准
在开发中ASCII编码字符都是用char来表示,可以转换成wchar_t表示;wchar_t类型与Unicode编码是完全独立的概念,不过在实现上Unicode编码一般用wchar_t来表示实现而已,但wchar_t字符并不一定就是Unicode编码字符。
对应两种字符类型存在两种字符串类型(C++):
string: char字符列表或者是字节列表(bytes)
wstring: wchar_t字符列表或者是宽子节列表
对应两种字符类型的输出函数流对象有:
sprintf/wsprintf: 分别对应char与wchar_t
cout/wcout:分别对应string与wstring
stringstream/wstringstream: 分别对应string与wstring
字符串常量
C++11标准中增加了一些表示字符串常量的标识,如下有:
L"您好!": wstring字符串常量,使用文件保存编码方式字符集
R"(您 好 \n)": 原始字符串常量(字节数组),保留所有的字符
u8"您好!": string字符串常量(字节数组),使用UTF8进行编码保存
字符集及编码
已知有很多的字符集,比如:ASCII,UTF8,GBK,GB2312,UTF16,UTF32,UNICODE,Latin等等。常用中文字符集编码有:
UTF8:又分为带签名和不带签名两种,Windows代码页为65001,VS中应该选择【UTF8-带签名】的格式
GBK/GB2312:Windows代码页为936
GB18030: Windows代码页为54936
小技巧:修改Windows系统中cmd命令行窗口的显示字符集,默认字符集为OS字符集,如GBK-936。如果希望显示UTF8字符,则可以修改:chcp 65001.
在VS项目的调试命令窗口中无法手动修改,可以通过system函数来修改:
system("C:\\Windows\\system32\\chcp 65001");