1.字符串:
类型wchar_t,size 4bytes;【搭配L】,L"汉字",字符串中,\0占4个字节(一般C++中应用);
类型char,size 1bytes;utf-8中文占3个字节;"汉字",字符串中,\0占1个字节;
gb2312占两个字节;
UTF-8:
linux默认使用的编码,类型char,单位字节为1字节,无大小端问题,适合网络传输;
但是对于汉字,至少需要3个字节来表示(linux,一般C中应用);网络传输浪费带宽,并且不易用下标表示汉字。
UTF-16:
window默认使用的Unicode(统一码、万国码、单一码),类型wchar_t,单位字节2字节,基本可以表示常见的汉字。
linux默认wchar_t,单位字节4字节,可以表示所有汉字。
PS:
char *类型的字面值,最终内存使用何种编码方式完全取决于当前文件的编码方式。
文件是GBK编码,文件中 char * str = "汉字",str 指向的内存字符串,二进制使用GBK编码。
文件是UTF-8编码,文件中 char * str = "汉字",str指向的内存字符串,二进制使用UTF-8编码。
所以,字符串应该放在资源文件里,而不是硬编码在.h/.cpp文件里。
EXA:
Unicode定义,“汉字”对应的数字是 0x6c49和0x5b57,而编码的程序数据是【小端存储(低字节靠前)】:
BYTE data_utf8[] = {0xE6, 0xB1, 0x89, 0xE5, 0xAD, 0x97}; // UTF-8编码
WORD data_utf16[] = {0x6c49, 0x5b57}; // UTF-16编码
DWORD data_utf32[] = {0x6c49, 0x5b57}; // UTF-32编码