1. 程式人生 > >有關於UTF-8 & Unicode編碼問題

有關於UTF-8 & Unicode編碼問題

由於計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機裡,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。

但是當引入中文或者其他語言的時候127的字元編碼就不夠用了,所以,中國製定了GB2312編碼,用來把中文編進去。

你可以想得到的是,全世界有上百種語言,日本把日文編到Shift_JIS裡,韓國把韓文編到Euc-kr裡,各國有各國的標準,就會不可避免地出現衝突,結果就是,在多語言混合的文字中,顯示出來會有亂碼。

也正因為這些原因,Unicode應運而生。Unicode把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了。

Unicode標準也在不斷髮展,但最常用的是用兩個位元組表示一個字元(如果要用到非常偏僻的字元,就需要4個位元組)。現代作業系統和大多數程式語言都直接支援Unicode。

現在,捋一捋ASCII編碼和Unicode編碼的區別:ASCII編碼是1個位元組,而Unicode編碼通常是2個位元組。

那麼問題又來了:如果統一成Unicode編碼,雖然消除了亂碼的問題,但是如果寫的文字都是英文,就會造成儲存空間的浪費,對於當時緊缺的記憶體空間,這是一件很消耗效能的事情。

所以,本著節約的精神,又出現了把Unicode編碼轉化為“可變長編碼”的UTF-8編碼(8-bit Unicode Transformation Format

)。UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成1個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組。如果你要傳輸的文字包含大量英文字元,用UTF-8編碼就能節省空間。

小結:在計算機記憶體中,統一使用Unicode編碼,當需要儲存到硬碟或者需要傳輸的時候,就轉換為UTF-8編碼。

還有一個我的觀點:UTF-8就是unicode一種壓縮機制,通過一種最優二叉樹的演算法把unicode編碼檔案壓縮到最小,而後通過UTF-8儲存或者傳輸已達到儲存最大化和傳輸效率最大化。

相關推薦

關於UTF-8 & Unicode編碼問題

由於計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機裡,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。 但是當引入中文或者其他語言的時候127的字元編碼就不夠用了,所以

MySQL 解決 emoji表情 的方法,使用utf8mb4 字符集 4位元組 UTF-8 Unicode 編碼

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

MySQL 解決 emoji表情 的方法,使用utf8mb4 字符集(4位元組 UTF-8 Unicode 編碼)

前段時間做專案遇到APP評論中有 emoji 表情符號,結果導致插入 MySQL資料庫失敗,時隔好久了,現在整理一下。一、基本原則如果要實現儲存 emoji 表情到 MySQL 例項,需要應用客戶端、到 MySQL 例項的連線、MySQL 例項內部 3 個方面統一使用或者支援

常用字符集編碼詳解 ASCII GB2312 GBK GB18030 UTF-8 unicode

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

GB2312、GBK、ISO-8859-1、ASCII碼、UnicodeUTF-8各種編碼格式詳解(終於搞懂了)

從計算機編碼歷史這條主線來理解各種編碼格式 計算機發明於歐美語系世界,最初只需要處理英文字母的編碼就可以了,也就是ISO-8859-1編碼規範;後來傳到中國,原有的編碼規範不能識別中文,於是發展出了GB2312、GBK等格式來編碼中文,同樣的對於阿拉伯語系、德俄西班牙之類的也會有其相應的編碼

UnicodeUTF-8字串編碼解碼原理

最近工作遇到一個Bug,大概情況是這樣的。一個密碼輸入框中輸入漢字“阿”,輸入內容校驗報錯文言顯示不對,在分析這個bug的時候,我發現了更有意思的知識點,那就是關於unicode和utf-8對字串進行編碼解碼的知識點。 首先需要明白的是unicode和utf-8的關係。

常用字符集編碼詳解 ASCII GB2312 GBK GB18030 UTF-8 unicode

ASCII ASCII碼是7位編碼,編碼範圍是0x00-0x7F。ASCII字符集包括英文字母、阿拉伯數字和標點符號等字元。其中0x00-0x20和0x7F共33個控制字元。只支援ASCII碼的系統會忽略每個位元組的最高位,只認為低7位是有效位。HZ字元編碼就是早期為了在只支援7位ASCII系統中傳輸中文而設

各種字元編碼詳解(ascii,utf-8,unicode,gbk,gb2312,iso8859-1等)

1. ASCII 我們需要了解的最早編碼是ASCII碼。它用7個二進位制位來表示,由於那個時期生產的大多數計算機使用8位大小的位元組,因此使用者不僅可以存放所有可能的ASCII字元,而且有整整一位空餘下來。如果你技藝高超,可以將該位用做自己離奇的目的:WordStar中那

python2和python3字元編碼utf-8,unicode

二進位制 -> 轉換 -> 字串 需要解碼 decode字串 -> 轉換 -> 二進位制 需要編碼 encodepython3 記憶體中使用的字串全部是unicode碼,但是網路傳輸的資料或者從磁碟讀取的資料是把unicode碼轉換過的資料,通常情況下可能是utf-8格式的資料,所以如

深入理解Python的字元編碼utf-8 & unicode

參考:http://lukejin.iteye.com/blog/598303 一,通過例子理解字元編碼 在Python中有兩個和字元很相關的型別,一個是str型別,一個是unicode型別。 這兩種型別的物件都是sequece序列,其中str是位元組序列,而unicode

ASCII 、GB2312、GBK、GB18030、unicodeUTF-8字符集編碼詳解

ASCII字符集編碼ASCII碼是7位編碼,編碼範圍是0x00-0x7F。ASCII字符集包括英文字母、阿拉伯數字和標點符號等字元。其中0x00-0x20和0x7F共33個控制字元。 只支援ASCII碼的系統會忽略每個位元組的最高位,只認為低7位是有效位。HZ字元編碼

utf-8 unicode 各種編碼的區別與聯絡

1.編碼的大概認識 以UTF8格式儲存的檔案檔首標識為EF BB BF。  效率 從上述編碼原理中得出的結論是: 1).每個英文字母、數字所佔的空間為1 Byte; 2).泛歐語系、斯拉夫語字母佔2 Bytes; 3).漢字佔3 Bytes。 由此可見UTF8對英文來說是個

文字檔案及二進位制檔案的大小, Unicode/utf-8/ansi編碼格式

今天看別人寫的程式, 有一點不是很明白, 就是在mfc的程式中利用CFile在寫檔案時是怎麼區別二進位制檔案和文字檔案的. 首先說一下二進位制檔案和文字檔案的區別: 從網上找到一篇文章, 寫的挺基礎, 通俗易懂的, 和大家分享: 現在搞懂了文字檔案與二進位制檔案之間

c# UTF-8解碼編碼及陣列與List<string>之間轉換等基本知識點總結

Encoding utf8 = Encoding.UTF8; //首先用utf-8進行解碼                 &

位(bit),位元組(Byte),KB,MB,GB,TB,UTF-8,Unicode,字符集,排序規則

1位元組(byte) = 8位(bit) 1KB=1024byte 1MB=1024KB 1GB=1024MB 位(bit):位只有兩種形式0和1 位元組(byte):位元組是有8個位組成的。可以表示256個狀態。1位元組(byte)=8位(bit) 一個utf8數字佔1個

utf-8 -------- 流編碼

GBK: gb2312做了增強 GB18030: 對GBK做了增強 BIG5: 支援繁體 Unicode: 支援多種國家的語言

python 3 寫中文報錯 SyntaxError: Non-UTF-8 code,編碼宣告的區別

python 預設是使用 ascii 編碼的,直接 print("中文") 是會報錯的: 例如: print("你好") 報錯: SyntaxError: Non-UTF-8 code starting with '\xc4' in file D:/Program Fi

ASCII,UTF-8,Unicode字串相互轉換(轉)

#include #include #include using namespace std; //utf8 轉 Unicode std::wstring Utf82Unicode(const std::string& utf8

utf8mb4 -- UTF-8 Unicode和utf8 -- UTF-8 Unicode區別的整理

utf8mb4 is a superset of utf8 utf8mb4相容utf8,且比utf8能表示更多的字元。至於什麼時候用,看你的做什麼專案了,到http://blog.csdn.net/leelyliu/article/details/52879685看uni

GBK(GB2312)向UTF-8編碼轉換

最近做一個IE外掛,要從網頁中取得文字,編碼到一個URL中去。在前一篇文章“中文URL編碼”中,粗略地介紹了URL編碼的規則,以及中文URL編碼的過程,但在如何將GBK或者GB2312編碼的漢字轉換到UTF-8編碼仍然是一個問題。編碼是一個很複雜的問題,我也瞭解甚少,這裡只是