常見編碼總結

本文總結自:https://blog.csdn.net/zmx729618/article/details/51821024

?

1. ISO 8859-1

字節數:1

范圍:0-255(編碼范圍是0x00-0xFF),其中0x00-0x7F之間完全和ASCII一致(ASCII是7位編碼,能個表示128個字符),因此向下兼容ASCII

表達范圍:多用于英文系列,還包括西歐語言、希臘語、泰語、阿拉伯語、希伯來語對應的文字符號。。。無法表示中文字符。

備注:由于ISO-8859-1編碼范圍使用了單字節內的所有空間,在支持ISO 8859-1的系統中,傳輸和存儲其他任何編碼的字節流都不會被拋棄。換言之,把其他任何編碼的字節流當作ISO-8859-1編碼看待都沒有問題(可以用它表示其他編碼)。

這是個很重要的特性,所以很多情況下(如很多協議傳輸數據時)都使用ISO 8859-1編碼。

?

?

2. GB2312/BIG5/GBK?

GB2312

范圍:ISO 8859-1的范圍+簡體中文

字節數:表達漢字時2個字節,表達英文1個字節,與ISO 8859-1一致,屬于變長編碼系統

BIG5

表達繁體漢字,多與GB2312結合使用

GBK

為解決GB2312與BIG5不兼容問題而誕生

范圍:ISO 8859-1的范圍+?所有亞洲文字的雙字節字符,包括簡體中文,繁體中文,日語,韓語等

字節數:類似于GB2312,屬于變長編碼系統

?

3. Unicode

范圍:所有語言

字節數:2個字節,包括英文字母在內,都以雙字節表示,所以它是不兼容ISO 8859-1編碼的。對于ISO 8859-1中所編碼的字符,Unicode編碼只是在前面增加了一個全為0字節

?

4. UTF/UTF-8/UTF-16/UTF-32

UTF

Unicode編碼不兼容ISO 8859-1編碼,而且容易占用更多的空間:因為對于英文字母,Unicode也需要兩個字節來表示,所以Unicode不便于傳輸和存儲。因此而產生了UTF編碼。

UTF是(Unicode Translation Format),即Unicode用于傳輸的格式。

?

UTF-32

字節數:4

Linux操作系統上所使用的Unicode方案,也是一種定長編碼。其缺點很顯然是造成了空間的巨大浪費,從而非常沒有效率,因此沒有UTF-8和UTF-16使用的頻繁,不做贅述。

?

UTF-16

字節數:2

但是,上文已經提到,Unicode基本多語言平面的字符只使用2個字節就可以表示了,真正需要擴展到4個字節來表示的字符少之又少。所以使用2個字節來表示Unicode代碼是一種很自然的選擇,例如英文的Unicode范圍是0x0000-0x007F,中文的Unicode范圍是0x4E00-0x9F**。對于那些擴展平面中需要4個字節才能表示的字符,UTF-16使用一種代理的手法來擴展(使用了基本多語言平面保留的0xD800-0xDFFF區段,表示這是一個代理,從而用2個16位碼元組成一個字符)。這樣的好處是大量的節約了存取空間,也提高了處理的速度。這種Unicode表示方法就是UTF-16,顯然,UTF-16需要1個或者2個16位長的碼元來表示,因此這是一個變長表示。一般在Windows平臺上,提到Unicode,那就是指UTF-16了。

UTF-16有一個著名的Endian的問題,即UTF16-LE和UTF16-BE,LE指Little Endian,而BE指Big Endian。關于這方面的信息,網上有很多相關的帖子。這與計算機的CPU架構有一定關系,我們一般的X86系統都是Little Endian的,可以認為UTF16就是UTF16-LE。

另外,UTF有一個BOM(Byte Order Mark)的問題。在Unicode編碼中有一個叫做"zero-width no-break space (ZWNBSP)"的字符,它的編碼是0xFEFF。而0xFEFF在是一個實際中不存在的字符,所以不應該出現在實際傳輸中。UCSUCS (Unicode?Character Set) 規范建議我們在傳輸字節流前,先傳輸字符"ZWNBSP"。這樣如果接收者收到FEFF,就表明這個字節流是Big-Endian的;如果收到FFFE,就表明這個字節流是Little- Endian的。因此字符"ZWNBSP"又被稱作BOM。

?

UTF-8

字節數:1-6個不等,例如中文,3個字節,英文,1個字節,兼容ISO 8859-1

UTF16的最大好處在于大部分字符都以固定長度的字節(2字節)儲存,但UTF-16卻無法兼容于ASCII編碼。由于對于歐洲和北美,實際上使用的編碼范圍在0x0000-0x00FF之間,只需要一個字符就可以表示所有的字符。即使是使用UTF16來作為內存的存取方式,還是會帶來巨大的空間浪費,因此就有了UTF8的編碼方式。

UTF-8編碼是最靈活的UTF編碼形式,即兼容ISO 8859-1的編碼,同時也可以用來表示所有語言的字符。顯然,UTF-8編碼是不定長編碼,每一個字符的長度從1-6個字節不等。另外,UTF編碼自帶簡單的校驗功能。

備注:

理論上將,UTF-8 格式使用1-6字節,最大能編碼 31 位字符,但最新的 UTF-8規范也只使用1-4個字節,最大能編碼21位。

不同平臺對UTF-8的支持不相同,例如低版本的低版本的MySQL只支持到3字節

?

UTF8mb4

utf8mb4比utf8多了對emoji編碼支持

?

轉載于:https://www.cnblogs.com/yanze/p/9922894.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387821.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387821.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387821.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

啟動一個Java進程

windows版本 startup.bat -------------------------------------------------------- rem --------------------------------------------------------------------------- rem Start SMS Server by zhangjin rem --------------------------------------------------------…

Flask框架從入門到精通之參數配置(二)

知識點: 1、參數配置 一、概況 上一篇我們已經把Flask第一個程序運行起來了,那么這一篇主要講一下Flask參數的配置。 二、配置參數 Flask參數配置方式有很多種,每一種都可以達到結果,在合適的場景選擇合適的配置方式。 配置文件 在…

BP神經網絡python簡單實現

BP神經網絡的原理在網上有很詳細的說明,這里就不打算細說,這篇文章主要簡單的方式設計及實現BP神經網絡,并簡單測試下在恒等計算(編碼)作測試。 BP神經網絡模型圖如下 BP神經網絡基本思想 BP神經網絡學習過程由信息的…

golang的reflection(轉)(一)

2019獨角獸企業重金招聘Python工程師標準>>> 反射reflection 可以大大提高程序的靈活性,使得interface{}有更大的發揮余地反射可以使用TypeOf和ValueOf函數從接口中獲取目標對象信息反射會將匿名字段作為獨立字段(匿名字段的本質)…

idea教程--Maven 骨架介紹

簡單的說,Archetype是Maven工程的模板工具包。一個Archetype定義了要做的相同類型事情的初始樣式或模型。這個名稱給我們提供來了一個一致的生成Maven工程的方式。Archetype會幫助作者給用戶創建Maven工程模板,并給用戶提供生成相關工程模板版本的參數化…

datatables.js 簡單使用--多選框和服務器端分頁

說明:datatables是一款jQuery表格插件。感覺EasyUI的datagrid更易用 內容:多選框和服務器端分頁 緣由:寫這篇博客的原因是datatables的文檔寫的不怎么樣,找東西很麻煩 環境:asp.net mvc , vs2015sqlserver2012 顯示效…

python異常(高級) Exception

異常(高級) Exception 異常回顧:     try-except 語句 捕獲(接收)異常通知,把異常流程變為正常流程     try-finally 語句 執行必須要執行的語句.     raise 語句 發送異常通知,同時進入異常流程     assert 語句 發送AssertionError異常     with 語句 wi…

反射賦值

目前例子為NPOI Excel導入 入庫時調用 var file file1.PostedFile.InputStream;var fileExt System.IO.Path.GetExtension(file1.FileName);IWorkbook workbook;if (fileExt ".xlsx")workbook new XSSFWorkbook(file);elseworkbook new HSSFWorkbook(file);DB.D…

基于PCA(主成分分析)的人臉識別

代碼下載:基于PCA(主成分分析)的人臉識別 人臉識別是一個有監督學習過程,首先利用訓練集構造一個人臉模型,然后將測試集與訓練集進行匹配,找到與之對應的訓練集頭像。最容易的方式是直接利用歐式距離計算測…

從BMW Vision iNEXT 看寶馬如何進軍自動駕駛

安全很重要,空間也要很大,砍掉大量物理按鍵,內飾材料要環保,還要提供自動和主動兩套駕駛方案。這些描述僅是BMW Vision iNEXT(下稱Vision iNEXT)概念車的設計之冰山一角。 一款概念車當然無法完全代表未來…

CSS浮動(二)---Float

重新認識float 2.1. 誤解和“誤用” 既然提到“誤用”,各位看官就此想想,自己平日是怎么使用float的?另外,既然“誤用”加了引號,就說明這樣的使用并不是真正的誤用,而是誤打誤撞使用之后,帶…

Hadoop0.20.2版本在Ubuntu下安裝和配置

1、安裝JDK   (1)下載安裝JDK:確保計算機聯網之后命令行輸入下面命令安裝JDK   sudo apt-get install sun-java6-jdk   (2)配置計算機Java環境:打開/etc/profile,在文件最后輸入下面內容 …

云原生生態周報 Vol. 2

業界要聞 Kubernetes External Secrets 近日,世界上最大的域名托管公司 Godaddy公司,正式宣布并詳細解讀了其開源的K8s外部 Secrets 管理項目: Kubernetes External Secrets,簡稱KES。這個項目定義了ExternalSecrets API&#xff…

centos 7新機使用前操作

關閉防火墻 systemctl stop firewalld(停服務) systemctl status firewalld(看狀態) systemctl disable firewalld.service (永久關閉) selinux getenforce(查狀態) vi /etc/selinux…

ubuntu10.04+hadoop0.20.2平臺配置(完全分布式模式)

配置環境及有關工具:ubuntu10.04 、hadoop0.20.2 、 jdk1.6.0_29 我們的機器有三臺,一臺當作namenode、兩臺當作datanode: namenode:IP:192.168.0.25、機器名:kiddenzj (這里的機器名要注意:機…

成佛、遠不止渡滄海

地之及東南,有一海,稱為“滄海”。滄海對面,就是仙家佛地。凡是能渡過滄海到達彼岸的人,就能立地成佛,修成正果。 于是,許許多多的人千里迢迢趕來,或乘帆船,或乘木筏,紛紛…

軟件架構演進

傳統架構到分布式架構詳解 軟件架構演進軟件架構的發展經歷了從單體架構、垂直架構、SOA架構到微服務架構的過程,博客里寫到了這四種架構的特點以及優缺點分析,個人學習之用,僅供參考! 1.1.1 單體架構 特點:1、所有的…

hadoop0.20.0第一個例子

這是Hadoop學習全程記錄第2篇,在這篇里我將介紹一下如何在Eclipse下寫第一個MapReduce程序。 新說明一下我的開發環境: 操作系統:在windows下使用wubi安裝了ubuntu 10.10 hadoop版本:hadoop-0.20.2.tar.gz Eclipse版本&…

IDEA 修改JavaWeb的訪問路徑

問題描述 對于我這個剛剛使用IDEA不久的新手來說,能夠正常運行就不錯了,不過到了后面,可能會覺得IDEA給你分配的默認訪問路徑很不順手,比如訪問的時候需要通過: http://localhost:8080/web_war_exploded/ 來訪問,對于web_w…

防撞庫基本要求

專用安全要求 口令要求 設計要求說明 要求 是否滿足 密碼長度至少 8位字符,密碼復雜性要求至少包含以下4種類別中的2種:大寫字母、小寫字母、數字、特殊符號 必選 滿足 系統應具備對口令強度檢測的能力,并對用戶進行提示(盡量不要…