UTF-8

UTF-8

針對Unicode的可變長度字符編碼
UTF-8(8位元,Universal Character Set/Unicode Transformation Format)是針對Unicode的一種可變長度字符編碼。它可以用來表示Unicode标準中的任何字符,而且其編碼中的第一個字節仍與ASCII相容,使得原來處理ASCII字符的軟件無須或隻進行少部分修改後,便可繼續使用。因此,它逐漸成為電子郵件、網頁及其他存儲或傳送文字的應用中,優先采用的編碼。
  • 中文名:UTF-8
  • 外文名:UTF-8,a transformation format of ISO 10646
  • 别名:
  • 創建時間:1992年
  • 定義:針對Unicode的可變長度字符編碼
  • 所屬領域:計算機科學技術

發展曆程

在所有字符集中,最知名的可能要數被稱為ASCII的8位字符集了。它是美國标準信息交換代碼(American Standard Code for Information Interchange)的縮寫為美國英語通信所設計。它由128個字符組成,包括大小寫字母、數字0-9、标點符号、非打印字符(換行符、制表符等4個)以及控制字符(退格、響鈴等)組成。

但是,由于它是針對英語設計的,當處理帶有音調标号(形如漢語的拼音)的亞洲文字時就會出現問題。因此,創建出了一些包括256個字符的由ASCII擴展的字符集。其中有一種通常被稱為IBM字符集,它把值為128-255之間的字符用于畫圖和畫線,以及一些特殊的歐洲字符。另一種8位字符集是ISO8859-1Latin1,也簡稱為ISOLatin-1。它把位于128-255之間的字符用于拉丁字母表中特殊語言字符的編碼,也因此而得名。歐洲語言不是地球上的唯一語言,因此亞洲和非洲語言并不能被8位字符集所支持。僅漢語字母表(或pictograms)就有80000以上個字符。但是把漢語、日語和越南語的一些相似的字符結合起來,在不同的語言裡,使不同的字符代表不同的字,這樣隻用2個字節就可以編碼地球上幾乎所有地區的文字。因此,創建了UNICODE編碼。它通過增加一個高字節對ISO Latin-1字符集進行擴展,當這些高字節位為0時,低字節就是ISO Latin-1字符。UNICODE支持歐洲、非洲、中東、亞洲(包括統一标準的東亞象形漢字和韓國表音文字)。但是,UNICODE并沒有提供對諸如Braille(盲文),Cherokee,,Ethiopic(埃塞俄比亞語),Khmer(高棉語),Mongolian(蒙古語),Hmong(苗語),Tai Lu,Tai Mau文字的支持。同時它也不支持如Ahom(阿霍姆語),Akkadian(阿卡德語),Aramaic(阿拉米語),Babylonian Cuneiform(古巴比倫楔形文字),Balti(巴爾蒂語), Brahmi(婆羅米文),Etruscan(伊特拉斯坎語),Hittite(赫梯語/西台語),Javanese(爪哇語),Numidian(),Old Persian Cuneiform(古波斯楔形文字),Syrian(叙利亞語)之類的古老文字。

Unicode隻是一組字符設定或者說是從數字和字符之間的邏輯映射的概念編碼,但是它并沒有指定代碼點如何在計算機上存儲。UCS4、UTF-8、UTF-16(UTF後的數字代表編碼的最小單位,如UTF-8表示最小單位1字節(=8bits)所以它可以使用1、2、3字節等進行編碼,UTF-16表示最小單位2字節,所以它可以使用2、4字節進行編碼)都是Unicode的編碼方案。其中UTF-8因可以兼容ASCII而被廣泛使用。

基本特征

UCS字符U+0000到U+007F(ASCII)被編碼為字節0×00到0x7F(ASCIⅡ兼容)。這意味着隻包含7位ASCIl字符的文件在ASCIⅡ和UTF-8兩種編碼方式下是一樣的。

所有大于0x007F的UCS字符被編碼為一個有多個字節的串,每個字節都有标記位集。因此,ASCIl字節(0x00-0x7F)不可能作為任何其他字符的一部分。表示非ASCIl字符的多字節串的第一個字節總是在0xC0到0XFD的範圍裡,并指出這個字符包含多少個字節。多字節串的其餘字節都在0x80到0xBF範圍裡。這使得重新同步非常容易,并使編碼無國界,且很少受丢失字節的影響。

UTF-8編碼字符理論上可以最多到4個字節長,然而16位BMP字符最多隻用到3字節長,Bigendian UCS-4字節串的排列順序是預定的,字節0xFE和OxFF在UTF-8編碼中從未用到。

編碼字節數

UTF-8使用1~4字節為每個字符編碼:

·一個US-ASCIl字符隻需1字節編碼(Unicode範圍由U+0000~U+007F)。

·帶有變音符号的拉丁文、希臘文、西裡爾字母、亞美尼亞語、希伯來文、阿拉伯文、叙利亞文等字母則需要2字節編碼(Unicode範圍由U+0080~U+07FF)。

其他語言的字符(包括中日韓文字、東南亞文字、中東文字等)包含了大部分常用字,使用3字節編碼。

其他極少使用的語言字符使用4字節編碼。

字符集

UTF-8編碼規則:如果隻有一個字節則取值為x00-x7F。其餘字節按長度進行以下拓展:

UTF-8由4種編碼方式實現,即UTF8-1/UTF8-2/UTF8-3/UTF8-4。其中:

UTF8-1

x00-x7F

UTF8-2

xC2-xDFx80-xBF

UTF8-3

xE0xA0-xBFx80-xBF

xE1-xECx80-xBFx80-xBF

xEDx80-x9Fx80-xBF

xEE-xEFx80-xBFx80-xBF

UTF8-4

xF0x90-xBFx80-xBFx80-xBF

xF1-xF3x80-xBFx80-xBFx80-xBF

xF4x80-x8Fx80-xBFx80-xBF

UTF816進制編碼表

注:每種編碼可能有多個編碼範圍,每個編碼範圍間,以空格作為每個字節的分隔符。例如UTF8-3的第一個編碼,其第一個字節取值必須為xE0,第二個字節範圍為xA0-xBF,第三個字節為x80-xBF。

優缺點

優點

UTF-8編碼可以通過屏蔽位和移位操作快速讀寫。字符串比較時(strcmp)和(wcscmp)的返回結果相同,因此使排序變得更加容易。字節FF和FE在UTF-8編碼中永遠不會出現,因此他們可以用來表明UTF-16或UTF-32文本(見BOM)UTF-8是字節順序無關的。它的字節順序在所有系統中都是一樣的,因此它實際上并不需要BOM。

缺點

你無法從UNICODE字符數判斷出UTF-8文本的字節數,因為UTF-8是一種變長編碼它需要用2個字節編碼那些用擴展ASCII字符集隻需1個字節的字符ISOLatin-1是UNICODE的子集,但不是UTF-8的子集8位字符的UTF-8編碼會被email網關過濾,因為internet信息最初設計為7位ASCII碼。因此産生了UTF-7編碼。UTF-8在它的表示中使用值100xxxxx的幾率超過50%,而現存的實現如ISO2022,4873,6429和8859系統,會把它錯認為是C1控制碼。因此産生了UTF-7.5編碼

上一篇:樂富POS機

下一篇:S pen

相關詞條

相關搜索

其它詞條