C++_字串位元組碼
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編碼