Unicode->UTF-8歷史變遷,及其差異" />

那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

從ASCII碼->Unicode-> UTF-8歷史變遷,及其差異

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 作者:黃工的嵌入式技術 ? 2020-02-27 15:56 ? 次閱讀

說到ASCII,Unicode和UTF-8,可能大家都知道是字符編碼,但具體含義,以及其中差異,可能很多人都不知道。 一、名稱解釋ASCII:AmericanStandardCode forInformationInterchange,美國信息互換標準代碼。 Unicode:統一碼、萬國碼、單一碼,是計算機科學領域里的一項業界標準,包括字符集、編碼方案等。 UTF-8:8-bit Unicode Transformation Format,是一種針對Unicode的可變長度字符編碼。 二、歷史變遷先給大家看一張變遷圖:

很久以前,有一群人,他們決定用8個可以開合的晶體管來組合成不同的狀態,以表示世界上的萬物。他們看到8個開關狀態是好的,于是他們把這稱為“字節”。再后來,他們又做了一些可以處理這些字節的機器,機器開動了,可以用字節來組合出很多狀態,狀態開始變來變去。他們看到這樣是好的,于是它們就這機器稱為”計算機“。 開始計算機只在美國使用,八位的字節一共可以組合出256種不同的狀態。他們把其中的編號從0開始的32種狀態分別規定了特殊的用途,一但終端、打印機遇上約定好的這些字節被傳過來時,就要做一些約定的動作。遇上0×10, 終端就換行,遇上0×07, 終端就向人們嘟嘟叫。他們看到這樣很好,于是就把這些0×20以下的字節狀態稱為“控制碼”。他們又把所有的空格、標點符號、數字、大小寫字母分別用連續的字節狀態表示,一直編到了第127號,這樣計算機就可以用不同字節來存儲英語的文字了。大家看到這樣,都感覺很好,于是大家都把這個方案叫做ANSI。 后來,世界各地都開始使用計算機了,但是很多國家用的不是英文,他們的字母里有許多是ASCII里沒有的,為了可以在計算機 保存他們的文字,他們決定采用 127號之后的空位來表示這些新的字母、符號,還加入了很多畫表格時需要用下到的橫線、豎線、交叉等形狀,一直把序號編到了最后一個狀態255。從128 到255這一頁的字符集被稱“擴展字符集”。 等中國人們得到計算機時,已經沒有可以利用的字節狀態來表示漢字,而且常用漢字有六七千個,這個時候,中國人民就使用了一套漢字方案叫做GB2312”。隨著發展,又發現了一些局限,所以就有了GBK,再繼續往后增加了一些字符(如少數名族字體),GBK擴成了GB18030。

因為當時各個國家都像中國這樣搞出一套自己的編碼標準,結果互相之間誰也不懂誰的編碼,誰也不支持別人的編碼,連大陸和***這樣只相隔了150海里也使用不同編碼。這個時候,出現了一個叫 ISO 組織(國際標準化組織)決定著手解決這個問題。他們采用的方法很簡單:廢了所有的地區性編碼方案,重新搞一個包括了地球上所有文化、所有字母和符號 的編碼!他們打算叫它“Universal Multiple-Octet Coded Character Set”,簡稱 UCS, 俗稱 “Unicode”。

但是Unicode同樣也有2個問題:

1.計算機怎么知道二個字節為一個字符,如何識別二個字節為什么一個字符?

2.針對英文字符,如果使用大于1個字節來表示,那么低位的前面幾個字節全是0。很奢侈浪費空間,因為現在計算機大部分內容還是英文。

unicode在很長一段時間內無法推廣,直到互聯網的出現,為解決unicode如何在網絡上傳輸的問題,于是面向傳輸的眾多UTF(UCS Transfer Format)標準出現了。顧名思義,UTF-8就是每次8個位傳輸數據,而UTF-16就是每次16個位。UTF-8就是在互聯網上使用最廣的一種unicode的實現方式,這是為傳輸而設計的編碼,并使編碼無國界,這樣就可以顯示全世界上所有文化的字符了。 三、Charset and Encoding

1.什么是字符編碼Charset (Character set) 字符集:是對字符抽象表示的集合。包括世界上各種文字、符合和字符。 字符集只是一個規則集合的名字,對應到真實生活中,字符集就是對某種語言的稱呼。例如:英語,漢語,日語。 2.什么是字符編碼對于一個字符集來說要正確編碼轉碼一個字符需要三個關鍵元素:字庫表(character repertoire)、編碼字符集(coded character set)、字符編碼(character encoding)。

字庫表是一個相當于所有可讀或者可顯示字符的數據庫。字庫表決定了整個字符集能夠展現表示的所有字符的范圍。編碼字符集,即用一個編碼值code point來表示一個字符在字庫中的位置。字符編碼,將編碼字符集和實際存儲數值之間的轉換關系。 四、UTF-8和Unicode的關系看完上面兩個概念解釋,相信你應該明白其中關系了。Unicode就是上文中提到的編碼字符集,而UTF-8就是字符編碼,即Unicode規則字庫的一種實現形式。隨著互聯網的發展,對同一字庫集的要求越來越迫切,Unicode標準也就自然而然的出現。它幾乎涵蓋了各個國家語言可能出現的符號和文字,并將為他們編號。

五、進一步理解UTF-8編碼UTF-8編碼為變長編碼。最小編碼單位(code unit)為一個字節。一個字節的前1-3個bit為描述性部分,后面為實際序號部分。

1.如果一個字節的第一位為0,那么代表當前字符為單字節字符,占用一個字節的空間。0之后的所有部分(7個bit)代表在Unicode中的序號。

2.如果一個字節以110開頭,那么代表當前字符為雙字節字符,占用2個字節的空間。110之后的所有部分(5個bit)加上后一個字節的除10外的部分(6個bit)代表在Unicode中的序號。且第二個字節以10開頭。

3.如果一個字節以1110開頭,那么代表當前字符為三字節字符,占用3個字節的空間。110之后的所有部分(5個bit)加上后兩個字節的除10外的部分(12個bit)代表在Unicode中的序號。且第二、第三個字節以10開頭。

來看一個UTF-8編碼例子:

發現其中規律:1個字節的UTF-8十六進制編碼是以比8小的數字開頭的 2個字節的UTF-8十六進制編碼是以C或D開頭的 3個字節的UTF-8十六進制編碼是以E開頭的 本文就寫到這里,希望對你有幫助。當然,更多關于字符編碼的內容,感興趣朋友可以自行了解。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ASCII
    +關注

    關注

    5

    文章

    172

    瀏覽量

    35197
  • Unicode
    +關注

    關注

    0

    文章

    24

    瀏覽量

    12591
  • UTF-8
    +關注

    關注

    0

    文章

    13

    瀏覽量

    7873
收藏 人收藏

    評論

    相關推薦

    使用ads5407的test pattern的時候,設置為輸出555->AAA和000->FFF的時候某些管腳輸出不正確,為什么?

    您好,在使用ads5407的test pattern的時候,當設置為全部輸出為0和全部輸出為1的時候,功能正確;但是當我設置為輸出555->AAA和000-&amp
    發表于 01-07 08:24

    ASCII在數據處理中的應用技巧

    ASCII作為計算機科學中的基石之一,其應用廣泛而深遠。文本編輯到網絡通信,數據存儲到程序開發,ASCII
    的頭像 發表于 11-10 10:39 ?782次閱讀

    ASCII在網絡傳輸中的重要性

    標準,最初于1963年由美國國家標準協會(ANSI)發布。它使用7位二進制數來表示128個不同的字符,包括大小寫字母、數字、標點符號和控制字符。后來,ASCII擴展到了8位,即ASCII-8
    的頭像 發表于 11-10 09:47 ?590次閱讀

    ASCIIUnicode的區別

    ASCIIUnicode是兩種不同的字符編碼標準,它們之間存在顯著的區別。以下是對這兩者的比較: 一、編碼范圍 ASCII : 主要用
    的頭像 發表于 11-10 09:40 ?787次閱讀

    如何使用ASCII進行編碼

    ,包括英文字母、數字、標點符號和一些特殊符號。每個字符在ASCII碼表中都有一個唯一的數字代碼,范圍0到127。以下是使用ASCII進行編碼的基本步驟: 1. 確定字符的
    的頭像 發表于 11-10 09:37 ?826次閱讀

    AIC3254EVM-U為什么不能將信號通路設置為MIC輸入--->PGA---->HP輸出的方式?

    新手剛玩AIC3254EVM-U,誰能幫忙看看,analog三個設置哪里出了問題,為什么不能將信號通路設置為MIC輸入--->PGA----&
    發表于 10-31 06:37

    sem信號量下semxx->parent.suspend_thread->next的值,應該執行take線程的被改變成了release線程,為什么?

    的某個時候,sem信號量下的semxx->parent.suspend_thread->next的值發生了改變,本來應該指向take線程的地址,變成了指向r
    發表于 07-12 14:36

    ESP32S2使用VSCODE編譯,總是會調用build->bootLoader->config->sdkconfig.h文件為什么?

    ESP32S2使用VSCODE編譯,在調用sdkconfig.h頭文件時,總是會調用 build->bootLoader->config-&
    發表于 06-07 06:48

    如果>=2 傳感器與GND短路,CY8CMBR3108無法啟動怎么解決?

    。 2) 然而,如果>2 焊盤在上電時與 GND 短路,CY8CMBR3108 將拒絕任何與之交易的嘗試,并且似乎無法正常啟動。 它永遠處于這種狀態,直到我消除足夠多的短路,使得只有
    發表于 05-31 14:27

    在官方庫中發現GPIOx->ODR這種寫法,是什么意思,怎么中間會有->?

    本人新手,剛接觸st的芯片 在官方庫中發現GPIOx->ODR這種寫法,不知道這是什么意思,怎么中間會有->? 請論壇上高手予以幫忙解答
    發表于 05-10 06:48

    tftlcd畫線程序里面xerr>distance和yerr>distance兩個條件能成立嗎?

    實驗中這個程序是沒問題的,就是在個人讀程序中,無法理解if(xerr>distance) 和if(yerr>distance) 兩個條件,個人認為dista
    發表于 04-22 07:35

    用CubeMx創建了Freertos,工程Middlewares->Tgird_Party->FreeRTOS ->Souce下面只有幾個空文件夾為什么?

    我用CubeMx創建了Freertos,發現在工程的Middlewares->Tgird_Party->FreeRTOS -&
    發表于 03-28 06:20

    怎么將pMCI[M1]->pSTM->bState 的 IDLE_START傳遞給STM[M1]->bState的?

    ] );// STM[M1]->bState switch ( StateM1 ) { case IDLE_START: 看了很多遍都沒發現是怎么將 pMCI[M1]-&
    發表于 03-27 07:56

    Open RAN的未來及其對AT&T的意義

    3月14日消息,在“Connected America 2024”會議上,AT&T高級副總裁兼網絡首席技術官Yigal Elbaz討論了Open RAN 的未來及其對AT&T的意義。
    的頭像 發表于 03-14 14:40 ?825次閱讀

    采用UTF8UTF16都無法使用中文SSID怎么解決?

    采用 UTF8UTF16都無法使用中文SSID 將wifi ssid設置為 \" test12 \",分別用了以下 3種 unicode編解碼格格式,測試情況分分如下: 1.格式一:UT
    發表于 02-29 06:36
    澳门百家乐技巧| 百家乐3式打法微笑心法| 百家乐赌场方法| 石柱| 网络百家乐官网开户网| 网上百家乐乐代理| 百家乐官网游戏资料网| 立即博百家乐娱乐城| 通渭县| 百家乐三珠连跳打法| 久盛娱乐城| 百家乐游戏真钱游戏| 大埔县| 新2百家乐现金网百家乐现金网| 大同县| 唐朝百家乐官网的玩法技巧和规则| 大发888网上支付| 百家乐官网投注之对冲投注| 百家乐分析概率原件| 伊宁县| 皇冠百家乐赢钱皇冠| 八大胜百家乐官网现金网| 网上百家乐哪家较安全| 大发888第一在线| 百家乐官网那个平好| 二八杠口诀| 网络百家乐的陷阱| 友谊县| 澳门百家乐鸿运| 太阳城百家乐官网的分数| 仕達屋百家乐的玩法技巧和规则| 百家乐官网平台信誉排名| 百家乐秘| 百家乐官网最保险的方法| 缅甸百家乐视频| 壹贰博网站| 玩百家乐澳门368娱乐城| 百家乐官网赌缆十三式| 大发888信誉娱乐城管理| 百家乐制胜方法| 澳门赌场美女|