幫你搞清ASCII、Unicode和UTF-8區別,拿走不謝 - 人人焦點
文章推薦指數: 80 %
幫你搞清ASCII、Unicode和UTF-8區別,拿走不謝. 2020-11-13 品位集結號. 首先說一下背景:由於計算機是美國人發明的,因此最早只有127個字母被編碼到計算機中,也就是 ...
人人焦點
影視
健康
歷史
數碼
遊戲
美食
時尚
旅遊
運動
星座
情感
動漫
科學
寵物
家居
文化
教育
故事
幫你搞清ASCII、Unicode和UTF-8區別,拿走不謝
2020-11-13品位集結號
首先說一下背景:由於計算機是美國人發明的,因此最早只有127個字母被編碼到計算機中,也就是大小寫英文字母、數字和一些符號,這個編碼表稱爲ASCII編碼。
例如:大寫字母A的編碼是65,小寫字母z的編碼時122。
要處理中文,顯然一個字節是不夠的,至少需要兩個字節,且不能和ASCII編碼衝突,所以我國制定了GB2312編碼,用於把中文編進去。
可以想像,全世界上有上百種語言,日本把日文編寫到Shift_JIS里,韓國把韓文編寫到Euc-kr里,各國有各國的標準,就不可避免出現衝突,結果就是,在多語言混合的文本中就會顯示亂碼。
在此背景下,Unicode應運而生,Unicode把所有語言都統一到一套編碼里,這樣就不會有亂碼問題了。
Unicode標準在不斷發展,最常用的是用兩個字節表示一個字符(如果要用到非常生僻的字符,就需要4個字節)。
現代作業系統和大多數程式語言都直接支持Unicode。
下面看看ASCII編碼和Unicode編碼的區別:ASCII編碼時1個字節,二Unicode編碼通常是兩個字節。
字母A用ASCII編碼是十進位的65,二進位的01000001。
字符0用ASCII編碼是十進位的48,二進位的00110000。
注意字符0和整數0是不同的。
漢字「中」已經超出了ASCII編碼的範圍,用Unicode編碼是十進位的20013,二進位的0100111000101101。
如果把ASCII編碼的A用Unicode編碼,只需要在前面補0就可,因此A的Unicode編碼是0000000001000001。
那麼新的問題就出現了:如果統一成Unicode編碼,亂碼問題從此消失了,但是寫的文本基本上全部是英文時,用Unicode編碼比ASCII編碼多一倍存儲空間,在存儲和傳輸上十分不划算。
本著節約的精神,又出現了把Unicode編碼轉化成爲「可變長編碼」的UTF-8編碼。
UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1~6個字節,常用的英文字母被編碼成1個字節,漢字通常是3個字節,只有很生僻的字符才會被編碼成4~6個字節。
如果你要傳輸的文本包含大量英文字母,用UTF-8編碼就會節省空間。
各編碼方式的比較由上表可知,UTF-8編碼有一個額外的好處,就是ASCII編碼實際上可看成是UTF-8編碼的一部分,所以只支持ASCII編碼的大量歷史遺留軟體可在UTF-8編碼下繼續使用。
搞清楚ASCII、Unicode和UTF-8的關係後,可總結一下現在計算機系統通用的字符編碼工作方式:在計算機內存中,統一使用Unicode編碼,當需要保持到硬碟或需要傳輸時,可轉換爲UTF-8編碼。
例如,用記事本編輯時,從文件讀取的UTF-8字符轉換爲Unicode字符到內存;編輯完成後,保持時再把Unicode轉換爲UTF-8保持到文件。
瀏覽網頁時,伺服器會把動態生成的Unicode內容轉換爲UTF-8再傳輸到瀏覽器,如下圖所示:我們經常看到很多網頁的源碼上有類似
相關焦點
計算機編碼ASCII、GBK、Unicode、UTF-8和URL編碼的區別
這裡就有幾個嚴重的問題,第一個問題是,計算機如何才能區別Unicode和ASCII?還有計算機怎麼知道三個字節表示一個符號,而不是分別表示三個符號呢?所以utf-8編碼是"E8BFB7"Python中Unicode字符轉UTF-8編碼:>>>'迷'.encode('utf-8')b'\xe8\xbf\xb7'那麼如何區分utf-8各個字符的?
Golang中的Unicode與UTF-8
至於Unicode本身,你可以認爲它就是Codepoint的集合,而UTF-8呢?就是Unicode的編碼方式。
(&34;,[]byte(`:joy:`))r,_:=utf8.DecodeRuneInString(`:joy:`) fmt.Printf(&34;,r) fmt.Printf(&34;,r)}Unicode
Cpython源碼閱讀16-Unicode字符串底層存儲結構
(unicode).ready=1;_PyUnicode_STATE(unicode).ascii=is_ascii;//實際data使用的編碼字節if(is_ascii){((char*)data)[size]=0;_PyUnicode_WSTR(unicode)=NULL;}
UNICODE,GBK,UTF-8區別
我很早前就發現Unicode、Unicodebigendian和UTF-8編碼的txt文件的開頭會多出幾個字節,分別是FF、FE(Unicode),FE、FF(Unicodebigendian),EF、BB、BF(UTF-8)。
但這些標記是基於什麼標準呢?
UTF-8GBKUTF8GB2312Unicode間核心區別關係
二、常見的UTF-8、GBK、Unicode之間的區別和聯繫Unicode是國際通用的一種編碼標準,它包含著世界上各個國家的所有符號且每一個符號都對應著一個全球唯一的數字。
西方人提出了一種編碼方式就是utf-8(utf16/utf32),是變長編碼,英文只用一個字節即可,漢字要用三個字節;針對漢字編碼的問題,專門提出了gbk,每個符號用兩個字節表示,比utf8的方式占用資源少。
因此,處理的文本主要爲中文時最好用gbk編碼,英文較多時用utf8編碼。
gbk和utf8兩種編碼之間轉換要通過unicode來間接實現。
從ASCII碼->Unicode->UTF-8歷史變遷,及其差異
unicode在很長一段時間內無法推廣,直到網際網路的出現,爲解決unicode如何在網絡上傳輸的問題,於是面向傳輸的衆多UTF(UCSTransferFormat)標準出現了。
顧名思義,UTF-8就是每次8個位傳輸數據,而UTF-16就是每次16個位。
UnicodeUTF-8UTF-16UTF-32的關係
ASCII編碼使用8bit(b0-b7)中的最高位b7位作爲奇偶校驗位,用來保障傳輸的可靠性,所以ASCII一共定義了2^7=128個字符集合。
所謂奇偶校驗,是指在代碼傳送過程中用來檢驗是否出現錯誤的一種方法,一般分奇校驗和偶校驗兩種。
python中str字符串和unicode對象字符串的拼接問題
字節碼是怎麼存的:如果這行代碼在python解釋器中輸入&運行,那麼s的格式就是解釋器的編碼格式;如果這行代碼是在源碼文件中寫入、保存然後執行,那麼解釋器載入代碼時就將s初始化爲文件指定編碼(比如py文件開頭那行的utf-8);unicode對象字符串unicode是一種編碼標準,具體的實現可能是utf-8,utf-16,gbk等等,這就是中文字符串和
VC|字符編碼與字符集ASCII、Unicode及文件
-8"/^>>>more.htmlecho^
不用再爲神奇的ASCII,Unicode字符編碼頭痛了!一文讓你弄懂編碼 從unicode到utf-8並不是直接的對應,而是要過一些算法和規則來轉換。
UTF-8是這樣做的:1.單字節的字符,字節的第一位設爲0,對於英語文本,UTF-8碼只占用一個字節,和ASCII碼完全相同;2.n個字節的字符(n>1),第一個字節的前n位設爲1,第n+1位設爲0,後面字節的前兩位都設爲10,這n個字節的其餘空位填充該字符unicode碼,高位用0補足。
Python並發編程很簡單,一文幫你搞清如何創建線程類 對於Python的並發編程相關的東東,相信通過上次咱們的探討,大家已經比較清楚了,對於Python創建線程的方式主要有兩種,這個上次咱們也已經說過了哦,第一種是使用threading模塊的Thread類的構造器來創建線程,這種方式上次咱們已經詳細討論過了哦,這次呢,咱們就重點和大家來聊聊第二種方式吧 Windows用iconv轉換utf-8等777種代碼 pandoc轉換的書籍常常會有編碼的問題,而導致不能直接運行其中的代碼,這個時候需要iconv工具,將utf-8轉換成ascii只需要一行代碼:iconv-futf-8-tascii//translita.md>b.md安裝iconv需要scoop工具:PSC:\Users\gaowei unicode_stop中文man頁面 unicode_stop中文man頁面unicode_stop撤銷以前unicode_start(1)命令的效果,將顯示屏和鍵盤設回到8-bit模式. PHP獲取漢字unicode碼的通用函數 把一個漢字轉爲unicode的通用函數,不依賴任何庫,和別的自定義函數,但有條件:本文件以及函數的輸入參數應該用utf-8編碼,不然要加函數轉換。
Unicode及程式語言中的UTF-8字符串引策略 在本文中,蟲蟲將來大家說說Unicode編碼,以及實例討論UTF-8在EmacsLisp,Julia和Golang語言的編碼和索引策略。
Unicode和編碼空間蟲蟲以前文章中,我們提到了爲了表示世界上上使用的各種語言和符號,開發了一個通用的編碼體系Unicode。
天熱了,教你簡單又美味的涼拌麵做法,配方在這裡,拿走不謝! 天熱了,教你簡單又美味的涼拌麵做法,配方在這裡,拿走不謝!天熱了,教你簡單又美味的涼拌麵做法,配方在這裡,拿走不謝!製作涼拌麵好吃最重要的就是它的涼拌料汁兒,學會這種萬能調料汁兒拌什麼麵條都好吃,做料汁的時候,首先我們要準備好這幾樣食材,生薑,大蒜,蔥花,辣椒圈兒。
把這些食材全部放進乾淨的容器中,加入一勺生抽,一勺老抽,一勺香油,一勺蚝油,適量的食用鹽和雞精,攪拌均勻。
添加少量的涼白開,攪拌成料汁。
延伸文章資訊
- 1幫你搞清ASCII、Unicode和UTF-8區別,拿走不謝 - 人人焦點
幫你搞清ASCII、Unicode和UTF-8區別,拿走不謝. 2020-11-13 品位集結號. 首先說一下背景:由於計算機是美國人發明的,因此最早只有127個字母被編碼到計算機中,也就是 ...
- 2Unicode、UTF-8、UTF-16,終於懂了 - 閱坊
- 3Unicode 與UTF-8 的差別 - Mobile01
我們常說的unicode編碼指的是utf-16, utf-8 是通用的html/xml編碼, 對ascii字元, utf-8用單字元編碼, utf-16用2字元, 超出utf-8的256字元外的...
- 4Unicode,UTF-8和UTF-16的區別與聯絡 - IT人
但是對於中文等遠東字符集來說,就比較坑爹了。char str[]; str[0]並不能完整表示一個漢字。UTF-8編碼格式下,一個漢字需要至少3個char才能表示 ...
- 5「底層原理」Unicode與UTF-8的區別 - 每日頭條
UTF-8是一種變長的編碼方式。它可以使用1~4個字節表示一個符號,根據不同的符號而變化字節長度。UTF-8的編碼規則有 ...