小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

ANSI、ASCII、Unicode和UTF

 昵稱15242507 2015-09-18
1、ANSI編碼
     unicode和ansi都是字符代碼的一種表示形式。
為使計算機支持更多語言,通常使用 0x80~0xFF 范圍的 2 個字節(jié)來表示 1 個字符。比如:漢字 '中' 在中文操作系統(tǒng)中,使用 [0xD6,0xD0] 這兩個字節(jié)存儲。
       不同的國家和地區(qū)制定了不同的標準,由此產(chǎn)生了 GB2312, BIG5, JIS 等各自的編碼標準。這些使用 2 個字節(jié)來代表一個字符的各種漢字延伸編碼方式,稱為 ANSI 編碼。在簡體中文系統(tǒng)下,ANSI 編碼代表 GB2312 編碼,在日文操作系統(tǒng)下,ANSI 編碼代表 JIS 編碼。
        不同 ANSI 編碼之間互不兼容,當信息在國際間交流時,無法將屬于兩種語言的文字,存儲在同一段 ANSI 編碼的文本中。
ANSI編碼表示英文字符時用一個字節(jié),表示中文用兩個字節(jié),而unicode不管表示英文字符還是中文都是用兩個字節(jié)來表示。

2、ASCII

計算機內部的數(shù)據(jù)最終以二進制形式存放,每個二進制位(bit)有0和1兩種狀態(tài),而8個二進制位(bit)組合稱為一個字節(jié)(Byte),所以一個字節(jié)能夠組合出256中狀態(tài),即從00000000到11111111。

上世紀70年代,美國國度標準協(xié)會(American National Standard Institute , ANSI )制訂了ASCII碼(American Standard Code for Information Interchange,美國標準信息交換碼):使用7 位二進制數(shù)共128個組合來表示所有的大寫和小寫字母,數(shù)字0 到9、標點符號, 以及在美式英語中使用的特殊控制字符。


第0~32號及第127號(共34個)是控制字符或通訊專用字符,如控制符:LF(換行)、CR(回車)、FF(換頁)、DEL(刪除)、BEL(振鈴)等;
第33~126號(共94個)是字符,其中第48~57號為0~9十個阿拉伯數(shù)字;65~90號為26個大寫英文字母,97~122號為26個小寫英文字母,其余為一些標點符號、運算符號等。

PS:在計算機的存儲單元中,一個ASCII碼值占一個字節(jié)(8個二進制位),其最高位(b7)用作奇偶校驗位。所謂奇偶校驗,是指在代碼傳送過程中用來檢驗是否出現(xiàn)錯誤的一種方法,一般分奇校驗和偶校驗兩種。奇校驗規(guī)定:正確的代碼一個字節(jié)中1的個數(shù)必須是奇數(shù),若非奇數(shù),則在最高位b7添1;偶校驗規(guī)定:正確的代碼一個字節(jié)中1的個數(shù)必須是偶數(shù),若非偶數(shù),則在最高位b7添1。


3、UNICODE

一個字節(jié)中的后7位總共只能表示128個不同的字符,英語用這些字符已經(jīng)足夠了,可是要表示其他語言卻是不夠。比如,在法語中,字母上方有注音的符號,就無法用ASCII表示。于是,一些國家就利用了字節(jié)中閑置的最高位編入新的符號。這樣一來,就可以表示最多256個符號,這就是擴展的ASCII 碼,所以現(xiàn)在有7位和8位的兩種ASCII碼,擴展的ASCII 碼允許將每個字符的第8 位用于確定附加的128 個特殊符號字符、外來語字母和圖形符號。但是,不管怎樣,0~127表示的字符是一樣的,不同的只是128~255.

PS:查詢后128個ASCII對應字符的技巧:新建一個文本文檔,按住ALT+要查詢的碼值(注意,這里是十進制) ,松開即可顯示出對應字符。

但即使擴展到256個符號也不夠用,比如漢字據(jù)統(tǒng)計有10萬個以上,而且同一個數(shù)值在各國的語言中表示的卻不同,比如130在法語里面é,而在希臘語里面則代表Gimel。于是UNICODE應運而生。

Unicode字符集編碼是Universal Multiple-Octet Coded Character Set 通用多八位編碼字符集的簡稱,是國際組織制定的可以容納世界上所有文字和符號的字符編碼方案。

Unicode是一種在計算機上使用的字符編碼。它為每種語言中的每個字符設定了統(tǒng)一并且唯一的二進制編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求。Unicode 標準始終使用十六進制數(shù)字,而且在書寫時在前面加上前綴“U+”,例如字母“A”的編碼為 004116 和字符“?”的編碼為 20AC16。所以“A”的編碼書寫為“U+0041”。但Unicode只是一個符號集,它只規(guī)定了符號的二進制代碼,卻沒有規(guī)定這個二進制代碼應該如何存儲。


4、UTF-8

事實證明,對可以用ASCII表示的字符使用UNICODE并不高效,因為UNICODE比ASCII占用大一倍的空間,而對ASCII來說高字節(jié)的0對 他毫無用處。為了解決這個問題,就出現(xiàn)了一些中間格式的字符集,他們被稱為通用轉換格式,即UTF(Universal Transformation Format)。目前存在的UTF格式有:UTF-7, UTF-7.5, UTF-8, UTF-16, 以及 UTF-32。

UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼(定長碼),也是一種前綴碼。它可以用來表示Unicode標準中的任何字符,且其編碼中的第 一個字節(jié)仍與ASCII兼容,這使得原來處理ASCII字符的軟件無須或只須做少部份修改,即可繼續(xù)使用。因此,它逐漸成為電子郵件、網(wǎng)頁及其他存儲或傳 送文字的應用中,優(yōu)先采用的編碼。

UTF-8用1~4個字節(jié)對Unicode進行編碼。從Unicode到UTF-8的編碼方式如下:


000000 - 00007F║0xxxxxxx
000080 - 0007FF║110xxxxx 10xxxxxx
000800 - 00FFFF║1110xxxx 10xxxxxx 10xxxxxx
010000 - 10FFFF║11110xxx 10xxxxxx 10xxxxxx 10xxxxxx


對于0x00-0x7F之間的字符,UTF-8編碼與ASCII編碼完全相同;
帶有附加符號的拉丁文、希臘文、西里爾字母、亞美尼亞語、希伯來文、阿拉伯文、敘利亞文及它拿字母則需要二個字節(jié)編碼(Unicode范圍由);
其他基本多文種平面(BMP)中的字符(這包含了大部分常用字)使用三個字節(jié)編碼;
其他極少使用的Unicode 輔助平面的字符使用四字節(jié)編碼;

UTF-8編碼的最大長度是4個字節(jié)。從上表可以看出,4字節(jié)模板有21個x,即可以容納21位二進制數(shù)字。Unicode的最大碼位0x10FFFF也只有21位。


UTF-8解析算法:


如果字節(jié)(Byte)的第一位為0,則B為ASCII碼,并且Byte獨立的表示一個字符;
如果字節(jié)(Byte)的第一位為1,第二位為0,則Byte為一個非ASCII字符(該字符由多個字節(jié)表示)中的一個字節(jié),并且不為字符的第一個字節(jié)編碼;
如果字節(jié)(Byte)的前兩位為1,第三位為0,則Byte為一個非ASCII字符(該字符由多個字節(jié)表示)中的第一個字節(jié),并且該字符由兩個字節(jié)表示;
如果字節(jié)(Byte)的前三位為1,第四位為0,則Byte為一個非ASCII字符(該字符由多個字節(jié)表示)中的第一個字節(jié),并且該字符由三個字節(jié)表示;
如果字節(jié)(Byte)的前四位為1,第五位為0,則Byte為一個非ASCII字符(該字符由多個字節(jié)表示)中的第一個字節(jié),并且該字符由四個字節(jié)表示 

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多