c++字串完全指南 - win32字元編碼(一)
翻譯:連波
14/11/2002
url: 前言
字串的表現形式各異,象tchar,std::string,bstr等等,有時還會見到怪怪的用_tcs起頭的巨集。這個指南的目的就是說明各種字串型別及其用途,並說明如何在必要時進行型別的相互轉換。
在指南的第一部分,介紹三種字元編碼格式。理解編碼的工作原理是致為重要的。即使你已經知道字串是乙個字元的陣列這樣的概念,也請閱讀本文,它會讓你明白各種字串類之間的關係。
指南的第二部分,將闡述各個字串類,什麼時候使用哪種字串類,及其相互轉換。
字串基礎 - 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 個寬字元
C 字串完全指南 Win32字元編碼(一)
c 字串完全指南 win32字元編碼 一 前言 字串的表現形式各異,象tchar,std string,bstr等等,有時還會見到怪怪的用 tcs起頭的巨集。這個指南的目的就是說明各種字串型別及其用途,並說明如何在必要時進行型別的相互轉換。在指南的第一部分,介紹三種字元編碼格式。理解編碼的工作原理是...
C 字串完全指南 Win32字元編碼(一)
c 字串完全指南 win32字元編碼 一 2002 11 14 17 38 53 前言 字串的表現形式各異,象tchar,std string,bstr等等,有時還會見到怪怪的用 tcs起頭的巨集。這個指南的目的就是說明各種字串型別及其用途,並說明如何在必要時進行型別的相互轉換。在指南的第一部分,介...
C 字串型別說明 Win32 字元編碼
引言 毫無疑問,我們都看到過像 tchar,std string,bstr 等各種各樣的字串型別,還有那些以 tcs 開頭的奇怪的巨集。你也許正在盯著顯示器發愁。本指引將總結引進各種字元型別的目的,展示一些簡單的用法,並告訴您在必要時,如何實現各種字串型別之間的轉換。在第一部分,我們將介紹3種字元編...