-
無論是全球哪種文字,只需要保存文件的時候,保存成UNICODE編碼就可以被其他電腦正常解釋。
-
UTF-8等編碼體積比較大,占電腦空間比較多,如果面向的使用人群絕大部分都是中國人,用 GBK等編碼也可以。
各個字符編碼特征
“字節”是一個8位的物理存貯單元,而“字符”則是一個文化相關的符號。
-
Ascii
(American Standard Code for Information Interchange,美國信息互換標准代碼)
- 1個字節
| 字符值 | 0 | A | a |
|---|---|---|---|
| 十進制 | 48 | 65 | 97 |
-
GBK
(Guo Biao Kuozhan 國標擴展(碼))
- 兩字節長的漢字字符和一字節長的英文字符並存於同一套編碼方案里
-
Unicode
(Universal Multiple-Octet Coded Character Set,簡稱UCS, 俗稱unicode),嚴格來說unicode屬於字符集,而不是編碼,編碼用utf
- 分為UCS-2(標准的2字節形式),UCS-4(4字節形式)
\u開頭是unicode
-
utf-8
(UCS Transfer Format -8)
- 一種變長的編碼方式,可以使用1~4個字節表示一個符號,根據不同的符號而變化字節長度
- 當字符在ASCII碼的范圍時,就用一個字節表示,保留了ASCII字符一個字節的編碼做為它的一部分,
- UTF-8一個中文字符占3個字節。
- 從unicode到utf-8並不是直接的對應,而是要過一些算法和規則來轉換。
- 因為utf-8編碼的字符串長度和字符個數沒有固定換算關系,導致排版,排序之類的復雜度上升。所以用unicode存儲。
- utf以
\x開頭
字符編碼發展過程
這里只介紹常見的 ,非時間順序

-
計算機能夠處理二進制數據,早期人們決定用8個可以開合的晶體管來組合成不同的狀態,稱為“字節”,美國制定Ascii來保存英文文字
- 把所有的空格、標點符號、數字、大小寫字母分別用連續的字節狀態表示,一直編到了第127號。
-
127號之后的空位來表示這些新的字母、符號,還加入了很多畫表格時需要用下到的橫線、豎線、交叉等形狀,一直把序號編到了最后一個狀態255。從128 到255這一頁的字符集被稱“擴展字符集”。
-
但是中國漢字太多,經過在GB2312編碼一系列擴展后形成GBK標准的編碼方案
- 把漢字、數學符號、羅馬希臘的字母、日文的假名們都編進去了,連在 ASCII 里本來就有的數字、標點、字母都統統重新編了兩個字節長的編碼,這就是常說的“全角”字符,而原來在127號以下的那些就叫“半角”字符了
-
由於像GBK一樣各個國家都有自己的編碼標准,為了統一,國際標准化組織ISO重新搞一個包括了地球上所有文化、所有字母和符號的編碼unicode
- 直接規定必須用兩個字節
-
對於ASCII里的那些“半角”字符,unicode保持其原編碼不變,只是將其長度由原來的8位擴展為16位,其高8位永遠是0,浪費空間
-
為解決unicode如何在網絡上傳輸的問題,於是面向傳輸的眾多UTF標准出現了,UTF-8就是每次8個位傳輸數據,而UTF-16就是每次16個位
Base64
用途
-
嚴格來說base64不能算是一種加密,只能說是編碼轉換。使用base64的初衷。是為了方便把含有不可見字符串的信息用可見字符串(Ascii)表示出來,以便復制粘貼
-
如果在網絡上直接傳輸二進制,比如圖片,或者字符,需要用4/3倍帶寬傳輸數據的Base64究竟有什么意義?
-
真正的原因是二進制不兼容。某些二進制值,在一些硬件上,比如在不同的路由器,老電腦上,表示的意義不一樣,做的處理也不一樣。同樣,一些老的軟件,網絡協議也有類似的問題。
-
但是萬幸,Base64使用的64個字符,經ASCII/UTF-8編碼后在大多數機器,軟件上的行為是一樣的。Base64能夠將任何數據轉換為易移植的字符串,避免了傳輸過程中失真問題
-
特征
- Base64編碼是從二進制值到某些特定字符(英文大小寫、數字和+、/以及用作后綴等號)的編碼,這些特定字符一共64個,所以稱作Base64。
- base64是把3個字節變成4個可打印字符,所以base64編碼后的字符串一定能被4整除(不算用作后綴的等號)
- 等號一定用作后綴,且數目一定是0個、1個或2個。這是因為如果原文長度不能被3整除,base64要在后面添加\0湊齊3n位。為了正確還原,添加了幾個\0就加上幾個等號。顯然添加等號的數目只能是0、1或2;
URL編碼
規則
目前比較常見的就是把字符轉化為utf-8的十六進制,每個字節用%開頭
Refer:
[1]Unicode 和 UTF-8 有什么區別? - 盛世唐朝的回答 - 知乎
[2]為什么要使用base64編碼,有哪些情景需求? - wuxinliulei的回答 - 知乎
[3]密碼學 | Base64是加密算法嗎? - 彭旭銳的文章 - 知乎
[4]計算機中為何不直接使用 UTF-8 編碼進行存儲而要使用 Unicode 再轉換成 UTF-8 ? - Ivony的回答 - 知乎
[5]程序員必備:徹底弄懂常見的7種中文字符編碼 - 騰訊的文章 - 知乎
[6]為什么要使用base64編碼,有哪些情景需求? - Wang Kai的回答 - 知乎
