字符集描述-寬字符描述

字符串基礎 - ASCII, DBCS, Unicode

所有的字符串類都起源於C語言的字符串,而C語言字符串則是字符的數組。首先了解一下字符類型。有三種編碼方式和三種字符類型。

第一種編碼方式是單字節字符集,稱之爲SBCS,它的所有字符都只有一個字節的長度。ASCII碼就是SBCS。SBCS字符串由一個零字節結尾。

第二種編碼方式是多字節字符集,稱之爲MBCS,它包含的字符中有單字節長的字符,也有多字節長的字符。Windows用到的MBCS只有二種字符類型,單字節字符和雙字節字符。因此Windows中用得最多的字符是雙字節字符集,即DBCS,通常用它來代替MBCS。

在DBCS編碼中,用一些保留值來指明該字符屬於雙字節字符。例如,Shift-JIS(通用日語)編碼中,值0x81-0x9F 和 0xE0-0xFC 的意思是:“這是一個雙字節字符,下一個字節是這個字符的一部分”。這樣的值通常稱爲前導字節(lead byte),總是大於0x7F。前導字節後面是跟隨字節(trail byte)。DBCS的跟隨字節可以是任何非零值。與SBCS一樣,DBCS字符串也由一個零字節結尾。

第三種編碼方式是Unicode。Unicode編碼標準中的所有字符都是雙字節長。有時也將Unicode稱爲寬字符集(wide characters),因爲它的字符比單字節字符更寬(使用更多內存)。注意,Unicode不是MBCS - 區別在於MBCS編碼中的字符長度是不同的。Unicode字符串用二個零字節字符結尾(一個寬字符的零值編碼)。

單字節字符集是拉丁字母,重音文字,用ASCII標準定義,用於DOS操作系統。雙字節字符集用於東亞和中東語言。Unicode用於COM和Windows NT內部。

讀者都很熟悉單字節字符集,它的數據類型是char。雙字節字符集也使用char數據類型(雙字節字符集中的許多古怪處之一)。Unicode字符集用wchar_t數據類型。Unicode字符串L前綴起頭,如:

  wchar_t  wch = L'1';      // 2 個字節, 0x0031

  wchar_t* wsz = L"Hello";  // 12 個字節, 6 個寬字符

字符串的存儲

單字節字符串順序存放各個字符,並用零字節表示字符串結尾。例如,字符串"Bob"的存儲格式爲:


Unicode編碼中,L"Bob"的存儲格式爲:

用0x0000 (Unicode的零編碼)結束字符串


DBCS 看上去有點象SBCS。以後我們會看到在串處理和指針使用上是有微妙差別的。字符串"日本語" (nihongo) 的存儲格式如下(用LB和TB分別表示前導字節和跟隨字節):


注意,"ni"的值不是WORD值0xFA93。值93和FA順序組合編碼爲字符"ni"。(在高位優先CPU中,存放順序正如上所述)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章