在所有的字符集中,最著名的可能是稱為ASCII的7位字符集。它是美國信息交換標準代碼的縮寫,是為美國英語交流而設計的。由128個字符組成,包括大小寫字母、數字0-9、標點符號、非打印字符(換行符、制表符等。)和控制字符(退格、鈴等。).
但是因為是為英文設計的,所以在處理帶聲調標簽的亞洲文字(像漢語拼音)時會有問題。因此,已經創建了壹些由ASCII擴展的包括255個字符的字符集。其中壹種通常被稱為IBM字符集,它使用值在128-255之間的字符進行繪圖和畫線,以及壹些特殊的歐洲字符。另壹種8位字符集是ISO 8859-1拉丁1,也簡稱ISOLatin-1。它使用128-255之間的字符對拉丁字母中的特殊語言字符進行編碼,因此得名。歐洲語言不是地球上唯壹的語言,因此亞洲和非洲語言不能被8位字符集支持。僅中文字母(或象形文字)就有80,000多個字符。
而漢語、日語、越南語中的壹些相似的字符組合在壹起,不同的字符在不同的語言中代表不同的詞,這樣就可以只用兩個字節對世界上幾乎所有地方的字符進行編碼。因此,UNICODE編碼應運而生。
它通過添加壹個高位字節來擴展ISO Latin-1字符集。當這些高字節位為0時,低字節是ISO Latin-1字符。UNICODE支持歐洲、非洲、中東和亞洲(包括東亞象形文字和表音文字)。但是,UNICODE不支持盲文、切諾基語、埃塞俄比亞語、高棉語、蒙古語、苗語、泰魯語和泰茂語等字符。同時,它不支持諸如Ahom,阿卡德語,阿拉姆語,?巴比倫楔形文字,巴爾蒂語,布拉米語,伊特魯裏亞語,赫梯語,爪哇語,努米甸語,古波斯楔形文字,敘利亞語和其他古代文字。
事實證明,對於可以用ASCII表示的字符,使用UNICODE的效率並不高,因為UNICODE占用的空間是ASCII的兩倍,而對於ASCII來說,高字節0對他來說毫無用處。為了解決這個問題,有壹些中間格式字符集,稱為通用轉換格式,即UTF (Unicode轉換格式)。常見的UTF格式有UTF-7、UTF-7.5、UTF-8、UTF-16和?UTF-32 .
如果壹個UNICODE字符由2個字節表示,那麽將它編碼成UTF-8可能需要3個字節。如果UNICODE字符由4個字節表示,則可能需要6個字節來編碼UTF-8。用4或6個字節編碼壹個UNICODE字符可能太多了,但很少遇到這樣的UNICODE字符。
UTF-8編碼規則:如果只有壹個字節,其最高二進制位為0;如果是多字節,第壹個字節從最高有效位開始,值為1的連續二進制位數決定編碼的字節數,其他所有字節從10開始。
實際代表ASCII字符的UNICODE字符將被編碼成1字節,UTF-8表示法與ASCII字符表示法相同。將所有其他UNICODE字符轉換成UTF-8至少需要2個字節。每個字節都以壹個轉義序列開始。第壹個字節由壹個唯壹的轉義序列組成,該序列由n個連續的1和壹個0組成。第壹個字節中連續的1的數量表示字符編碼所需的字節數。
當Unicode轉換為UTF-8時,Unicode二進制可以從低位取到高位,壹次取6位。如上所述,二進制可以按照如下例所示的格式取出,前面按照格式填充,不足8位用0填充。
總結:用傳播學理論的思維,可以理解為:
Unicode是壹個源代碼,它將字符集數字化;
Utf8是信道編碼,以便更好地存儲和傳輸。
註意:Unicode轉換成UTF-8需要的字節數可以按照這個規則計算:如果Unicode小於0X80(Ascii字符),那麽轉換後就是1字節。否則,轉換後的字節數是Unicode二進制數字減1,然後除以5。
參考:杜女良