帶你瞭解 Unicode和UTF-8編碼知識
一直以來總是對 unicode, UTF-8 等編碼知識懵懵懂懂的,尤其是在做專案過程中只要涉及到幾個編碼之間的轉換,都得到網上搜尋一番,根據別人的經驗照葫蘆畫瓢,才能解決問題,但是私底下卻完全不懂在做什麼。我再也不願意重複這種狀態了,於是就花了一個上午的時間,將這些知識整理了一遍。如果您覺得我的總結有疑問或者錯誤的地方,歡迎討論交流,批評指正。 |
正題之前,先引入我總結的 Unicode 思維導圖來預熱下:
要了解 Unicode, 先要從 ASCII 碼說起。
ASCII 碼(American Standard Code for Information Interchange)稱為美國標準資訊交換碼。它是基於拉丁字母的一套電腦編碼系統。它定義了一個用於代表常見字元的字典。
包括 "A-Z"(大小寫都包含),資料"0-9" 以及一些常見的符號。
ASCII 當初只是為美國英語而設計的,只能顯示 128 個編碼,對其他的語言無能為力。要想顯示其他語言的編碼,還是要使用 unicode。
為了將全世界的文字都統一的記錄下來,並將每個字元都用唯一的數字記錄下來,於是就產生了Unicode。
Unicode 也稱為 UCS(Universal Coded Character Set:國際編碼字符集合) 是一個字符集合,對世界上大部分的文字系統進行了整理,編碼,使電腦可以用更為簡單的方式來呈現和處理文字。最新的版本 Unicode 11.0 已經包含了 137439 個字元。
Unicode 的數量之多,如果完全涵蓋它, 需要用 4 個位元組來表示,但是計算機儲存過程中卻不是必須都用 4 個位元組來完成。對於有些字元,尤其是編碼在前面的字元我們也可以透過 1 個或 兩個位元組來節省空間。這就涉及到了 unicode 的實現方式。
Unicode 只是一個字符集合,每個字元用一個數字來表示,但是這些數字在計算機內採用什麼方式來儲存,是全部都是 4 個位元組,還是 1 到 4 個位元組不等,這就涉及到了字元編碼的概念。
我們說 Unicode 有幾種實現方式,也就是在問 Unicode 有幾種編碼方式?
Unicode 常用的編碼方式有 UTF-8, UCS-2, UTF-16 三種,另外還有一種 UTF-32 雖然不太常用也需要提一下。
Unicode 既然能夠儲存那麼多的字元,肯定是有它的儲存規則的,如果使用 16 進位制儲存,它的儲存範圍是多少到多少,是否都是直筒式的,從低到高排就可以了?也就是說 Unicode 的體系結構是怎麼樣的。
Unicode 當前定義其字元的儲存範圍是: 0hex 到 10FFFFhex ,共分為 17 個區段,可以儲存 1,114,112 個字元,這對當前 (137439) 來說遠遠足夠了。
其中區段為 0hex 到 FFFFhex 稱為 基本多文種平面 BMP (Basic Multilingual Plane),在這個平面中的字元表現形式是 U+ 後面跟 16 進位制數。例如 X 字元的 unicode 是 U+0058。
而超出 BMP 範圍的,也就是 10000hex–10FFFFhex 這 16 個區段,需要用到 5 到 6 位來表示,如 U+E0001 和 U+10FFFD。
UTF-8 是使用網際網路上使用最廣泛的 unicode 編碼方式,目前已經佔有整個網際網路 92% 的份額。這裡再強調下 UTF-8 只是 Unicode 的一種實現方式,UTF-8 是編碼方式,而 Unicode 是字符集合
它是可變長的編碼方式,長度從 1 個位元組到 4 個位元組不等。
它能夠完全相容 ASCII 碼,我們知道 ASCII 碼 是由 128 個字元組成的,而 Unicode 中的前 128 個字元和 ASCII 碼都是一一對應的。
UCS-2 只使用了兩個位元組(16 bit) 來表示字元,也就是說只能表示 65536 個字元,它只能表示 BMP 中的字元。
當前的 unicode 字元數量已遠遠超過了 UCS-2 的數量,因此 UCS-2 雖然還在被好多軟體使用,但它已經過期了。
正因為 UCS-2 編碼依然被許多軟體使用,為了能夠表示出 BMP 以外的平面內的字元,就產生了一種新的編碼 UTF-16 編碼。
UTF-16 就是為了解決 UCS-2 編碼的問題而生的,它擴充套件自 UCS-2
- 基本多文種平面中,與 UCS-2 編碼完全一致,使用兩個位元組表示
- U+010000 到 U+10FFFF 範圍 使用 4 個位元組表示
- ASCII 碼只能表示 128 個字元,只是針對美國英語而設計的, 為了表示其他語言的字元,於是就有了 Unicode
- Unicode 只是一個字符集,裡面收集了全世界絕大部分語言的字元。它有多種實現方式(編碼方式),最常用的就是 UTF-8
- UTF-8 編碼是變長位元組的,1 到 4 個位元組不等,並且它能夠完全相容 ASCII 碼
UTF-16 編碼的市場份額和 UTF-8 比很小, 在web 頁面中只佔 0.01% 。而且主要在 windows 系統中使用, Unix/ 以及 MacOS 中很少使用。
UTF-32 對 Unicode 中的每個字元都用 4 個位元組來表示,佔用的空間比其他編碼要多的多,也正是這個原因,人們才用的很少。
既然看到了這裡,您一定對 unicode 有了一些認識吧,請再來回顧下 Unicode 的思維導圖,加深下理解。
下面來總結下重點:
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2734561/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 你真的瞭解 Unicode 和 UTF-8 嗎?Unicode
- 字元編碼:ASCII,Unicode和UTF-8字元ASCIIUnicode
- 字元編碼筆記:ASCII,Unicode和UTF-8字元筆記ASCIIUnicode
- 字元編碼筆記:ASCII,Unicode 和 UTF-8字元筆記ASCIIUnicode
- 字元編碼 ASCII,Unicode 和 UTF-8 概念掃盲字元ASCIIUnicode
- 字符集編碼淺析:Unicode和UTF-8Unicode
- Unicode中UTF-8與UTF-16編碼詳解Unicode
- 字元編碼:Unicode & UTF-16 & UTF-8字元Unicode
- 字元編解碼的故事(ASCII,ANSI,Unicode,Utf-8區別)字元ASCIIUnicode
- Unicode編碼解碼Unicode
- 學習電腦編碼utf-8,ansi編碼的基礎知識等
- Unicode、GBK、UTF-8、ASCII的編碼簡介UnicodeASCII
- 字元編碼發展史4 — Unicode與UTF-8字元Unicode
- 你不得不瞭解的HTML知識HTML
- 帶你真正瞭解Java,Java程式設計師必學知識點整理Java程式設計師
- api介面如何對接?(帶你瞭解api介面的相關知識)API
- ANSI(字符集) and Unicode(字符集) and UTF-8(編碼Unicode字符集)Unicode
- 帶你瞭解webpackWeb
- 帶你真正的瞭解加密和Hash加密
- Sql Server UniCode編碼解碼SQLServerUnicode
- 關於Linux知識你瞭解多少呢?Linux
- 5篇頂會論文帶你瞭解知識圖譜最新研究進展
- Python編碼和UnicodePythonUnicode
- 帶你瞭解比特幣Bitcoin原始碼比特幣原始碼
- Unicode和UTF-8之間的轉換詳解Unicode
- unicode和UTF-8的區別Unicode
- 帶你快速瞭解HTMLHTML
- unicode,utf-8Unicode
- 瞭解少的知識
- 什麼是雲連線?雲學院帶你瞭解華為雲連線知識
- 解碼返回Unicode編碼的文字Unicode
- 面試官:你瞭解es6的知識嗎?面試
- 10張圖幫你全面瞭解JavaScript基礎知識JavaScript
- 你對電腦還一無所知?3分鐘帶你全面瞭解電腦基礎知識
- 轉貼 (談談Unicode編碼,簡要解釋UCS、UTF、BMP、BOM等名詞)&(UTF-8編碼規則)Unicode
- 符號編碼-ASCII、Unicode、Unicode big endian、UTF-8之間的關係(轉)符號ASCIIUnicode
- Base64編碼知識詳解
- web知識進階——字元編解碼Web字元