1. 程式人生 > >正則表達式——Unicode

正則表達式——Unicode

多字節 半角 windows 統一 字母 習慣 window point 符號

第 7 章 Unicode

7.1 關於編碼

??通常,英文編碼較為統一,都采用ASCII編碼或可以兼容ASCII編碼(即編碼表的前127位與ASCII編碼一直,常見的各種編碼,包括Unicode編碼都是如此)。也就是說,穩贏字母、阿拉伯數字、穩贏的各種符號,在不同編碼下的碼值(Code Point)基本是一樣的,比如字母A,起碼值總是41;中文的情況則不同,常見的中文編碼有GB18030(也就是CP54936,主要是在Windows平臺下使用。早期是GBK,也就是CP936,如今采用的GB18030與GBK是兼容的,考慮到大家習慣說“GBK編碼”,下文也采用“GBK編碼”的說法)和Unicode(主要用於Linux/UNIX、Mac OS)兩種,同一個中文字符在兩種編碼下的碼值並不相同。比如“發”,在GBK編碼下的碼值為b7a2,而在Unicode下其碼值為53d1(根據慣例,Unicode字符一般即為\uhex的形式,其中hex是碼值的十六進制表示,所以“發”的Unicode記法就是\u53d1).

??為方便下面的講解,這裏先約定兩種提法:

??ASCII字符,即ASCII編碼表中的字符(也就是碼值在0 ~ 127之間的字符,不包括擴展ASCII字符),每個字符用一個字節表示。常見的英文字符和半角標點符號,都屬於ASCII字符。

??非ASCII字符,即ASCII編碼表之外的字符,在本書中指多字節字符。中文字符屬於“非ASCII字符”,它們在GBK編碼中一般占用2個字節,在UTF-8編碼中占用3個字節。常見的Unicode編碼是UTF-8,它是Unicode的一種存儲格式,UTF-16也是一種存儲格式。無論是UTF-8還是UTF-16,同一字符的Unicode編碼是不變的,只是存儲時的變現形式不同。比如“發”的碼值53的,但以UTF-8編碼保存時占用3個字符,分別是e5 8f 91,保存為UTF-16編碼時占用用2個字符,分別53 d1。

正則表達式——Unicode