舉個簡單的例子:
Unicode 只是一個業界標准,具體一個字符占多少字節,取決於編碼方式,包括 UTF-8 UTF-16 GB2312 等
“漢” 在 UTF-8 中占到 3 個字節,即 E6 B1 89
在 GB2312 中占到 2 個字節,即 BA BA,一般我們的電腦都是以 GB2312 編碼中文的
注意:如果以 VS 編譯器以 Unicode 編碼,則是 0x6C49,同樣占 2 個字節,多字節則是 BA BA
wchar_t aaa[] = L"漢"; // 0x6c49 數組占 4 個字節,包括占兩個字節的 '\0' char bbb[] = "漢"; // 0xBABA 數組占 3 個字節,包括占一個字節的 '\0'
在 UTF-16 中占到 2 個字節,即 0x6C49
UTF-16 LE是windows上默認的Unicode編碼方式,使用wchar_t表示。所有wchar_t *類型的字符串(包括硬編碼在.h/.cpp里的字符串字面值),VC都自動采用UTF-16的編碼(字符串字面值,literal string,存在很多坑。特別是char *類型的字面值,最終內存使用何種編碼方式完全取決於當前文件的編碼方式。也就是說當前文件如果是GBK編碼的,那么文件里char * str = "中午",str指向的內存字符串二進制是使用GBK編碼的。如果文件編碼是UTF-8,那么內存是使用UTF-8編碼。所以為什么一直要強調字符串應該放在資源文件里,而不是硬編碼在.h/.cpp文件里!)。
使用 UTF-8 的優勢,沒有字節序的概念,特別適合用於字符串的網絡數據傳輸,不用考慮大小端問題。對於非英文網頁(對於我們而言,簡單說東亞文字網頁),能夠避免各種亂碼問題。
相關鏈接: