字符編碼

開發過程當中,有時會遇到亂碼的狀況,而後不知道爲何,對編碼沒有了解,遇到問題的時候也就一臉懵逼了,這篇文章對編碼作了一個彙總。編碼

一開始

寫代碼的時候,編碼出問題的時候,就知道把編碼設置爲UTF-8,爲啥呢?不知道。瞭解完編碼以後,纔不會只熟悉編碼的拼寫。code

字符

說編碼以前,咱們要先來了解一下字符cdn

什麼是字符?blog

字符:字符很簡單,其實就是一個表示,好比:中文字符、英文字符...開發

而後,什麼是字符集it

字符集:字面上理解,就是具體共同特徵的字符的集合io

編碼

說完字符以後,咱們來看一下什麼是編碼模板

編碼 = 佔用存儲 + 編碼表class

首先,看一下什麼佔用存儲?即規定一個字符用多少個字節來顯示,爲何呢?由於計算機只能處理0|1數據,因此咱們要規定佔用存儲。後臺

佔用存儲:規定一個字符用多少個字節來顯示

而後,來看一下什麼是編碼表,編碼表這個就容易了,就是規定哪一個字符對應哪一個編碼。

編碼表:規定字符集種每一個字符的對應關係

編碼說完了,咱們來看一下編碼格式。

ASCII(美國標準信息交換代碼)

提及編碼,第一個確定要說到ASCII,這個應該是咱們接觸的第一個編碼格式。

  • 一個字節(7/8位)
  • 定義128個字符(顯示字符95個,非顯示字符33個)

因爲ASCII只定義了英文字符,中文等其餘複雜的字符不能表現,因此有了ASCII的擴展,如GB23十二、GBK。

GB2312(信息交換用漢字編碼字符集)

GB2312,對ASCII擴展以後,支持中文。

  • 雙字節
  • 區位碼錶示(94區&94位)
  • 收錄漢字6773個

GBK(漢字內碼擴展規範)

因爲GB2312只有簡體中文,不能有繁體或者日文之類的,因此又擴展了GBK。

  • GB2312的擴展
  • 雙字節
  • 收錄漢字21003個(支持中日韓漢字)

GB18030(漢字編碼國家標準)

漢字的總數其實很是多,像少數名字的漢字並無在GBK中,因此後面又擴展了GB18030。

  • 單/雙/四字節 同時支持
  • 補充多名族語言(藏、蒙古、傣、彝、朝鮮、維吾爾文等)
  • GB18030-2000:收錄漢字27533個
  • GB18030-2005:收錄漢字70244個

Unicode-字符集

ASCII的擴展,只能知足一部分的需求,當國際化出現的時候,發現兼容不了,因此就出現了Unicode字符集,又稱統一碼、萬國碼、單一碼。是對全世界語言的字符集合。

  • 用U+ 緊接一組16進制的數字表示(如:U+4AE0
  • 基礎表示都在0號平面,另外擴展16個平面,在16進制前面多加一個字節表示(如U+3FFFF

Unicode的編碼有三種,區別在於用多少個字節表示

  • UTF-8:可變長
  • UTF-16:大部分2字節
  • UTF-32:4字節

UTF-8

UTF-8是Unicode編碼中最經常使用的一種,這裏咱們主要介紹UTF-8

下面咱們看下怎麼將Unicode編碼成UTF-8

咱們以 「漢」 爲例

  1. 拿到「漢」的Unicode表示 U+6C49
  2. 而後查看下圖編碼模板,得知6C49位於000800-00FFFF中間,因此咱們獲得模板 1110xxxx 10xxxxxx 10xxxxxx,設爲 a
  3. 6C49 轉化爲二進制,獲得 0110 1100 0100 1001 ,設爲 b
  4. 將 b 填充到 a 中的x位置,獲得 11100110 10110001 10001001 ,設爲 c
  5. 最後,將 c 轉成16進制,獲得 E6 B1 89 ,這個就是「漢」的UTF-8編碼

寫在最後

知道了什麼格式的編碼是什麼格式以後,後面出現亂碼的時候就能夠比較容易的查到緣由。咱們要作的處理比較簡單,就是先後臺使用同一編碼。就像語言交流,同一種語言才能共通。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息