日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算机字符编码方式

發布時間:2024/1/1 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机字符编码方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

📑來源

本文圖片均收集自網絡


?推薦

建議觀看以下計算機字符編碼方式科普視頻

《錕斤拷是怎樣煉成的——中文顯示“入”門指南【柴知道】》,bilibili @ 柴知道

https://www.bilibili.com/video/BV1cB4y177QR

《你懂亂碼嗎?錕斤拷燙燙燙(詳解 ASCII、Unicode、UTF-32、UTF-8編碼)》,bilibili @ 林粒粒呀

https://www.bilibili.com/video/BV1xP4y1J7CS

基礎概念

字符和字符集

**字符(character)**可以簡單地理解為計算機表示信息的單位

像符號、數字、字母、文字、emoji 表情等肉眼能直接看見的文本或表情都是可見字符(打印字符)

像換行、回車、換頁等肉眼不可見,但是卻能對文本進行控制的不可見字符(控制字符)

不可見字符中,空格、回車、換行、水平制表、垂直制表還被稱為空白字符

**字符集(character set)**就是字符的集合,如常見的 ASCII 字符集,GB2312 字符集,Unicode 字符集等

編號和編碼

一個字符集會給每個字符都規定個數字編號

由于計算機只能識別 0 和 1,因而在計算機內部,所有的信息最終都表示為一個二進制串,比如 100111101100000,每一個二進制位(bit)有 0 和 1 兩種狀態,而將字符對應到一個二進制串的過程,叫做字符編碼(character encoding)

💬注釋

下文如無特殊說明,出于方便,編碼均采用 16 進制數字進行表示,但實際上最終存儲在計算機中還是 2 進制的數字

一般對于比較小的字符集不用考慮太多,一個字符集就只有一種編碼方式,只要轉換成二進制,一個字符的編號就是它的編碼。但對像 Unicode 這種比較大的字符集就不一定是了,它有著多種編碼方式,編號也不等于編碼

字符集發展史

字符集有一個發展歷史,ASCII 是最早出現的字符集,僅含有 128 個字符,但局限于英文字母和部分符號,無法適用于非英語國家和地區,即便是后來拓充成 ASICII 字符集也不夠用

后來各個國家和地區都推出了自己的字符集,如中國大陸推出 GB2312、GBK、GB18030,中國港澳臺地區推出 Big5 等

但各地標準不統一,同一個編碼在不同字符集里對應的很可能是完全不同的字符,這就導致亂碼現象,最終才出現相關組織意推出囊括全球的大一統字符集 UCS 和 Unicode

目前主流的字符集是 Unicode,采取 UTF-8 編碼方式

GB2312、GBK、GB18030

發展歷史

其實“GB”就是“國標”,“K”就是“擴”的意思

  • 1980年, GB2312-80(我國的第一套漢字集標準),共包含7445個字符,其中6763個常用漢字
  • 1995年,GBK,由GB2312-80(和港、臺兩種標準)擴展而來,共包含21886個字符,其中常用漢字14240個
  • 2000年,GB18030-2000編碼標準是由信息產業部和國家質量技術監督局在2000年3月17日聯合發布的,并且作為一項國家標準在2001年的1月正式強制執行;增加了6351個字符,其中一部分為4字節字(four-byte encoding range)
  • 2005年,GB18030-2005《信息技術中文編碼字符集》是中國制訂的以漢字為主并包含多種中國少數民族文字(如藏、蒙古、傣、彝、朝鮮、維吾爾文等)的超大型中文編碼字符集強制性標準,其中收入漢字70000余個

GB2312 收錄的是最常用的漢字,可以說我們用到的 99% 的漢字,都屬于 GB2312 編碼范圍

目前用的最為廣泛的中文字符集是 GBK

編碼方式

📑對應

GB2312、GBK、GB18030 編碼知識均學習自《徹底搞明白 GB2312、GBK 和 GB18030》

https://zhuanlan.zhihu.com/p/453675608

GB2312 把每個漢字都編碼成兩個字節,第一個字節稱為"高位字節",第二個字節稱為"低位字節"

平常說的“英文字母單字節,中文漢字雙字節”就出自于此

“半角”和“全角”的概念也出自于此,“半角”是占單字節的字符,“全角”是占雙字節的字符,中文由于全是雙字節因而沒有半角和全角的區別,或者說中文全是全角。但英文和部分標點符號有半角和全角的區別,全角的英文和部分標點符號顯示表現為更“胖”了

GBK 也是把每個漢字都編碼成兩個字節,但編碼范圍更廣,涵蓋字符數量更多

GB18030 是變長多字節編碼,每個字或字符可以由一個,兩個或四個字節組成

GB2312、GBK、GB18030 依次在前者的基礎上擴充而來,因而都能向前兼容

Unicode

Unicode,也被稱為萬國碼、統一碼

狹義的 Unicode 就只是字符集,廣義的 Unicode 是一套標準,包括了字符集編碼規則

Unicode 規定了每個字符的數字編號,這個 Unicode 編號被稱為碼點(code point)碼位(code position),通常在編號前面加上"U+"表示是 Unicode 的編號

Unicode 的實現方式,也就是編碼方式,被稱為 Unicode 轉換格式(Unicode Transformation Format,UTF),目前有 UTF-8、UTF-16、UTF-32 幾套方案

考慮到存儲空間、格式識別等一系列因素,碼點一般都不等于編碼,需要進行一定的處理才形成編碼

如對于字符“你”而言

碼點UTF-8 編碼UTF-16 編碼UTF-32 編碼
4F60E4 BD A04F 6000 00 4F 60

💬相關

Unicode 字符百科

https://unicode-table.com/cn/blocks/

編碼方式

📑對應

Unicode 編碼知識部分學習自《UTF8、UTF16、UTF32區別》

https://blog.csdn.net/zhaohong_bo/article/details/89196938

UTF-8:當編碼為一個字節,則設最高比特位為 0,當編碼超過一個字節,則需要幾個字節,就在第一個字節從最高位開始令連續的幾個比特位為 1,之后的字節最高位為 10

UTF-16:使用2或4個字節進行存儲。對于 Unicode 編號范圍在 0~FFFF 之間的字符,統一用兩個字節存儲,無需字符轉換,直接存儲 Unicode 編號。對于 Unicode 字符編號在 10000-10FFFF 之間的字符,UTF-16 用四個字節存儲

UTF-32:用固定長度的字節存儲字符編碼,不管 Unicode 字符編號需要幾個字節,全部都用 4 個字節存儲,直接存儲Unicode 編號

平面

目前的 Unicode 字符分為 17 組編排,每組稱為一個平面(Plane),而每平面擁有 65536(即 21?)個碼點

每個平面還根據用途劃分成若干個區塊(Block),區塊相當于把同類字符放在一起,方便檢索和補充

而首個 16 位統一碼字符的平面稱為基本多文種平面(BMP),寫成 16 進制就是從 U+0000 到 U+FFFF,剩下還有 16 個輔助平面(SMP),碼點范圍從 U+010000 一直到 U+10FFFF,絕大部分的常見字符都在首個平面

這 17 個平面結合起來至少需要占據 21 位的空間,也就是差不多 3 個字節(24 位),而輔助平面實際上是用 4 個字節表示,方便以后向后擴展。

  • 第 0 平面稱為BMP(Basic Multilingual Plane)平面,又稱為基本多文種平面

  • 第 1 輔助平面稱為 SMP(Supplementary Multilingual Plane)平面,又稱為多文種補充平面,主要擺放拼音文字及符號

  • 第 2 輔助平面稱為 SIP(Supplementary Ideographic Plane)平面,又稱為表意文字補充平面,其范圍為 20000-2FFFF。

  • 第 3 輔助平面稱為 TIP(Tertiary Ideographic Plane)平面,又稱為表意文字第三平面,其范圍為 30000-3FFFF

  • 第 4 至 13 輔助平面尚未使用

  • 第 14 輔助平面稱為 SSP(Supplementary Special-purpose Plane)平面,又稱為特殊用途補充平面,擺放語言標簽(Language Tags)和異體字選擇器(Variation Selectors),這些都是控制字符,其范圍為 E0000-EFFFF

  • 第 15 輔助平面為補充私人使用區-A (Supplementary Private Use Area-A),其范圍為 F0000-FFFFF

  • 第 16 輔助平面為補充私人使用區-B(Supplementary Private Use Area-B),其范圍為 100000-10FFFF

emoji

emoji 表情也可以被稱作繪文字、彩色象形字符,算是一類特殊的字符,如 。最開始的 emoji 源于日語“絵文字”,是日本手機使用的表情,后來才被部分收錄進 Unicode 字符集

起初,Unicode 中的 emoji 表情只有黑色,而隨著 emoji 表情的發展,越來越多 emoji 表情開始有了彩色版本

此處額外提及一下另一個詞“顏文字”,源于日語“顔文字(kaomoji)”,顏文字是指用若干個字符排列成表情的樣子,如 O(∩_∩)O ,和 emoji 表情完全不是一個概念,但有的地方會把二者混為一談

💬相關

目前 Unicode 中收錄的所有 emoji 表情

https://www.unicode.org/emoji/charts/emoji-list.html

各版本 Unicode 中收錄的 emoji 表情的相關數據

https://unicode.org/Public/emoji/

Unicode 只是規定了 emoji 的碼點和含義,并沒有規定它具體表現成什么形式,Unicode 聯盟主要負責的就是 emoji 的審核、管理和編碼等工作,而設計 emoji 外觀的任務則交到了各平臺手里

有的平臺出于規避版權風險,有的平臺出于自己的設計理論、品牌風格來重新設計 Emoji 表情。比如有的 Emoji 表情富有立體感,并含有著漸變和陰影的細節,有的 Emoji 表情趨于扁平簡約化

因而發出去同個 emoji 表情(同個碼位),在不同平臺上看到的樣式可能是截然不同的

💬相關

emoji 的百科網站

網站 Emojipedia

https://emojipedia.org/zh/

網站 EmojiXD

https://emojixd.com/

網站 EMOJIALL

https://www.emojiall.com/zh-hans

輸入

emoji 表情沒有辦法直接通過鍵盤輸入,但可以通過復制粘貼,或通過碼點輸入 emoji 表情(對于其他 Unicode 字符也同樣適用)

  • dddd是十進制碼點,hhhh 是十六進制碼點
  • 在 HTML 中,可以寫成 HTML 實體 &#dddd; 或 &#xhhhh;
  • 在 CSS 中,可以寫成 \hhhh
  • 在 JavaScript 中,可以寫成 \uhhhh
  • 在部分平臺上(如 GitHub、Slack 等),可以使用 emoji 簡短代碼(Emoji Shortcode)
  • 有的平臺可能會有特定的快捷輸入 emoji 的方式

以 emoji 表情為例,可以將其碼點 U+1F600 寫成 HTML 形式 😀(十進制)或 😀(十六進制),CSS 形式 \1F600,JavaScript 形式 \uD83D\uDE00(輔助平面的字符需借助 UTF-16 編碼成 8 位),在部分平臺上簡短代碼 :grinning:,

💬相關

emoji 簡短代碼介紹

https://www.emojiall.com/zh-hans/help-shortcode

微信快捷輸入 emoji 表情方法

https://www.emojiall.com/zh-hans/platform-wechat

序列

📑對應

emoji 序列相關知識學習自《emoji 編碼規則介紹》

https://blog.csdn.net/chriscross/article/details/104746788

一個 emoji 表情,通常由一個 Unicode 碼點表示,但也可以由多個 Unicode 碼點組合成一個序列表示

但由于并不是所有的系統都支持最新的 emoji 標準,因而在有的系統上,多個 Unicode 碼點組合成一個序列表示 emoji 表情會被拆成多個 emoji 表情進行顯示

表示序列

有些字符,它既可以顯示成黑白文本,也可以顯示成彩色 emoji 表情,有的默認顯示為前者,有的默認顯示為后者,此處列舉幾個

表示序列(emoji presentation sequence),用于說明一個字符顯示為文本還是 emoji 表情

如果一個字符后面加上 U+FE0E,那么它就作為文本顯示

如果一個字符后面加上 U+FE0F,那么它就作為 emoji 表情顯示

📋格式

基礎字符 + 顯示方式 = 文本/emoji表情


📝例子

?(U+26C4) + U+FE0E = ??(U+26C4 U+FE0E)


📝例子

修飾序列

修飾序列(emoji modifier sequence),由一個基礎字符(base)和一個修飾字符(modifier)組成,主要用來修改 emoji 表情中人的膚色

📋格式

基礎 emoji 表情 + 膚色 = 對應膚色的 emoji 表情


📝例子

🧑(U+1F9D1) + 🏾(U+1F3FE) = 👨🏾(U+1F9D1 U+1F3FE)

💬相關

emoji 膚色類型

https://www.arpansa.gov.au/sites/default/files/legacy/pubs/RadiationProtection/FitzpatrickSkinType.pdf

旗幟序列

旗幟序列(emoji flag sequence)

📋格式

區域指標字母1 + 區域指標字母2 = 2個字母組成的國家碼對應的國旗


📝例子

🇨(U+1F1E8) + 🇳(U+1F1F3) = 🇨🇳(U+1F1E8 U+1F1F3)

鍵盤序列

鍵盤序列(emoji keycap sequence)

📋格式

數字 + U+FE0E + 方框 = 數字鍵盤


📝例子

2(U+0032) + U+FE0F + ? (U+20E3) = 2?? (U+0032 U+FE0F U+20E3)

零寬連接序列

零寬連接序列(emoji zero width joint sequence),通過 ZWJ 等寬連接符(U+200D),對多個 emoji 表情進行組合

目前有 5 種組合方式

📋格式

emoji 表情1 + U+200D + emoji 表情2 = 合成 emoji 表情


📝例子

👨?(U+1F468) + U+200D + 👩?(U+1F469) + U+200D + 👧?(U+1F467)= 👨?👩?👧?(U+1F468 U+200D U+1F469 U+200D U+1F467)

總結

以上是生活随笔為你收集整理的计算机字符编码方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。