UTF-8 的理解


舉個簡單的例子:

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 的優勢,沒有字節序的概念,特別適合用於字符串的網絡數據傳輸,不用考慮大小端問題。對於非英文網頁(對於我們而言,簡單說東亞文字網頁),能夠避免各種亂碼問題。

相關鏈接:

簡單幾句話總結Unicode,UTF-8和UTF-16

byte以及UTF-8的轉碼規則


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM