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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

计算机字符编码方式

發(fā)布時(shí)間:2024/1/1 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机字符编码方式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

📑來(lái)源

本文圖片均收集自網(wǎng)絡(luò)


?推薦

建議觀看以下計(jì)算機(jī)字符編碼方式科普視頻

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

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

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

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

基礎(chǔ)概念

字符和字符集

**字符(character)**可以簡(jiǎn)單地理解為計(jì)算機(jī)表示信息的單位

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

像換行、回車(chē)、換頁(yè)等肉眼不可見(jiàn),但是卻能對(duì)文本進(jìn)行控制的不可見(jiàn)字符(控制字符)

不可見(jiàn)字符中,空格、回車(chē)、換行、水平制表、垂直制表還被稱(chēng)為空白字符

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

編號(hào)和編碼

一個(gè)字符集會(huì)給每個(gè)字符都規(guī)定個(gè)數(shù)字編號(hào)

由于計(jì)算機(jī)只能識(shí)別 0 和 1,因而在計(jì)算機(jī)內(nèi)部,所有的信息最終都表示為一個(gè)二進(jìn)制串,比如 100111101100000,每一個(gè)二進(jìn)制位(bit)有 0 和 1 兩種狀態(tài),而將字符對(duì)應(yīng)到一個(gè)二進(jìn)制串的過(guò)程,叫做字符編碼(character encoding)

💬注釋

下文如無(wú)特殊說(shuō)明,出于方便,編碼均采用 16 進(jìn)制數(shù)字進(jìn)行表示,但實(shí)際上最終存儲(chǔ)在計(jì)算機(jī)中還是 2 進(jìn)制的數(shù)字

一般對(duì)于比較小的字符集不用考慮太多,一個(gè)字符集就只有一種編碼方式,只要轉(zhuǎn)換成二進(jìn)制,一個(gè)字符的編號(hào)就是它的編碼。但對(duì)像 Unicode 這種比較大的字符集就不一定是了,它有著多種編碼方式,編號(hào)也不等于編碼

字符集發(fā)展史

字符集有一個(gè)發(fā)展歷史,ASCII 是最早出現(xiàn)的字符集,僅含有 128 個(gè)字符,但局限于英文字母和部分符號(hào),無(wú)法適用于非英語(yǔ)國(guó)家和地區(qū),即便是后來(lái)拓充成 ASICII 字符集也不夠用

后來(lái)各個(gè)國(guó)家和地區(qū)都推出了自己的字符集,如中國(guó)大陸推出 GB2312、GBK、GB18030,中國(guó)港澳臺(tái)地區(qū)推出 Big5 等

但各地標(biāo)準(zhǔn)不統(tǒng)一,同一個(gè)編碼在不同字符集里對(duì)應(yīng)的很可能是完全不同的字符,這就導(dǎo)致亂碼現(xiàn)象,最終才出現(xiàn)相關(guān)組織意推出囊括全球的大一統(tǒng)字符集 UCS 和 Unicode

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

GB2312、GBK、GB18030

發(fā)展歷史

其實(shí)“GB”就是“國(guó)標(biāo)”,“K”就是“擴(kuò)”的意思

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

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

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

編碼方式

📑對(duì)應(yīng)

GB2312、GBK、GB18030 編碼知識(shí)均學(xué)習(xí)自《徹底搞明白 GB2312、GBK 和 GB18030》

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

GB2312 把每個(gè)漢字都編碼成兩個(gè)字節(jié),第一個(gè)字節(jié)稱(chēng)為"高位字節(jié)",第二個(gè)字節(jié)稱(chēng)為"低位字節(jié)"

平常說(shuō)的“英文字母單字節(jié),中文漢字雙字節(jié)”就出自于此

“半角”和“全角”的概念也出自于此,“半角”是占單字節(jié)的字符,“全角”是占雙字節(jié)的字符,中文由于全是雙字節(jié)因而沒(méi)有半角和全角的區(qū)別,或者說(shuō)中文全是全角。但英文和部分標(biāo)點(diǎn)符號(hào)有半角和全角的區(qū)別,全角的英文和部分標(biāo)點(diǎn)符號(hào)顯示表現(xiàn)為更“胖”了

GBK 也是把每個(gè)漢字都編碼成兩個(gè)字節(jié),但編碼范圍更廣,涵蓋字符數(shù)量更多

GB18030 是變長(zhǎng)多字節(jié)編碼,每個(gè)字或字符可以由一個(gè),兩個(gè)或四個(gè)字節(jié)組成

GB2312、GBK、GB18030 依次在前者的基礎(chǔ)上擴(kuò)充而來(lái),因而都能向前兼容

Unicode

Unicode,也被稱(chēng)為萬(wàn)國(guó)碼、統(tǒng)一碼

狹義的 Unicode 就只是字符集,廣義的 Unicode 是一套標(biāo)準(zhǔn),包括了字符集編碼規(guī)則

Unicode 規(guī)定了每個(gè)字符的數(shù)字編號(hào),這個(gè) Unicode 編號(hào)被稱(chēng)為碼點(diǎn)(code point)碼位(code position),通常在編號(hào)前面加上"U+"表示是 Unicode 的編號(hào)

Unicode 的實(shí)現(xiàn)方式,也就是編碼方式,被稱(chēng)為 Unicode 轉(zhuǎn)換格式(Unicode Transformation Format,UTF),目前有 UTF-8、UTF-16、UTF-32 幾套方案

考慮到存儲(chǔ)空間、格式識(shí)別等一系列因素,碼點(diǎn)一般都不等于編碼,需要進(jìn)行一定的處理才形成編碼

如對(duì)于字符“你”而言

碼點(diǎn)UTF-8 編碼UTF-16 編碼UTF-32 編碼
4F60E4 BD A04F 6000 00 4F 60

💬相關(guān)

Unicode 字符百科

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

編碼方式

📑對(duì)應(yīng)

Unicode 編碼知識(shí)部分學(xué)習(xí)自《UTF8、UTF16、UTF32區(qū)別》

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

UTF-8:當(dāng)編碼為一個(gè)字節(jié),則設(shè)最高比特位為 0,當(dāng)編碼超過(guò)一個(gè)字節(jié),則需要幾個(gè)字節(jié),就在第一個(gè)字節(jié)從最高位開(kāi)始令連續(xù)的幾個(gè)比特位為 1,之后的字節(jié)最高位為 10

UTF-16:使用2或4個(gè)字節(jié)進(jìn)行存儲(chǔ)。對(duì)于 Unicode 編號(hào)范圍在 0~FFFF 之間的字符,統(tǒng)一用兩個(gè)字節(jié)存儲(chǔ),無(wú)需字符轉(zhuǎn)換,直接存儲(chǔ) Unicode 編號(hào)。對(duì)于 Unicode 字符編號(hào)在 10000-10FFFF 之間的字符,UTF-16 用四個(gè)字節(jié)存儲(chǔ)

UTF-32:用固定長(zhǎng)度的字節(jié)存儲(chǔ)字符編碼,不管 Unicode 字符編號(hào)需要幾個(gè)字節(jié),全部都用 4 個(gè)字節(jié)存儲(chǔ),直接存儲(chǔ)Unicode 編號(hào)

平面

目前的 Unicode 字符分為 17 組編排,每組稱(chēng)為一個(gè)平面(Plane),而每平面擁有 65536(即 21?)個(gè)碼點(diǎn)

每個(gè)平面還根據(jù)用途劃分成若干個(gè)區(qū)塊(Block),區(qū)塊相當(dāng)于把同類(lèi)字符放在一起,方便檢索和補(bǔ)充

而首個(gè) 16 位統(tǒng)一碼字符的平面稱(chēng)為基本多文種平面(BMP),寫(xiě)成 16 進(jìn)制就是從 U+0000 到 U+FFFF,剩下還有 16 個(gè)輔助平面(SMP),碼點(diǎn)范圍從 U+010000 一直到 U+10FFFF,絕大部分的常見(jiàn)字符都在首個(gè)平面

這 17 個(gè)平面結(jié)合起來(lái)至少需要占據(jù) 21 位的空間,也就是差不多 3 個(gè)字節(jié)(24 位),而輔助平面實(shí)際上是用 4 個(gè)字節(jié)表示,方便以后向后擴(kuò)展。

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

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

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

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

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

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

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

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

emoji

emoji 表情也可以被稱(chēng)作繪文字、彩色象形字符,算是一類(lèi)特殊的字符,如 。最開(kāi)始的 emoji 源于日語(yǔ)“絵文字”,是日本手機(jī)使用的表情,后來(lái)才被部分收錄進(jìn) Unicode 字符集

起初,Unicode 中的 emoji 表情只有黑色,而隨著 emoji 表情的發(fā)展,越來(lái)越多 emoji 表情開(kāi)始有了彩色版本

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

💬相關(guān)

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

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

各版本 Unicode 中收錄的 emoji 表情的相關(guān)數(shù)據(jù)

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

Unicode 只是規(guī)定了 emoji 的碼點(diǎn)和含義,并沒(méi)有規(guī)定它具體表現(xiàn)成什么形式,Unicode 聯(lián)盟主要負(fù)責(zé)的就是 emoji 的審核、管理和編碼等工作,而設(shè)計(jì) emoji 外觀的任務(wù)則交到了各平臺(tái)手里

有的平臺(tái)出于規(guī)避版權(quán)風(fēng)險(xiǎn),有的平臺(tái)出于自己的設(shè)計(jì)理論、品牌風(fēng)格來(lái)重新設(shè)計(jì) Emoji 表情。比如有的 Emoji 表情富有立體感,并含有著漸變和陰影的細(xì)節(jié),有的 Emoji 表情趨于扁平簡(jiǎn)約化

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

💬相關(guān)

emoji 的百科網(wǎng)站

網(wǎng)站 Emojipedia

https://emojipedia.org/zh/

網(wǎng)站 EmojiXD

https://emojixd.com/

網(wǎng)站 EMOJIALL

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

輸入

emoji 表情沒(méi)有辦法直接通過(guò)鍵盤(pán)輸入,但可以通過(guò)復(fù)制粘貼,或通過(guò)碼點(diǎn)輸入 emoji 表情(對(duì)于其他 Unicode 字符也同樣適用)

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

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

💬相關(guān)

emoji 簡(jiǎn)短代碼介紹

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

微信快捷輸入 emoji 表情方法

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

序列

📑對(duì)應(yīng)

emoji 序列相關(guān)知識(shí)學(xué)習(xí)自《emoji 編碼規(guī)則介紹》

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

一個(gè) emoji 表情,通常由一個(gè) Unicode 碼點(diǎn)表示,但也可以由多個(gè) Unicode 碼點(diǎn)組合成一個(gè)序列表示

但由于并不是所有的系統(tǒng)都支持最新的 emoji 標(biāo)準(zhǔn),因而在有的系統(tǒng)上,多個(gè) Unicode 碼點(diǎn)組合成一個(gè)序列表示 emoji 表情會(huì)被拆成多個(gè) emoji 表情進(jìn)行顯示

表示序列

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

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

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

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

📋格式

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


📝例子

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


📝例子

修飾序列

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

📋格式

基礎(chǔ) emoji 表情 + 膚色 = 對(duì)應(yīng)膚色的 emoji 表情


📝例子

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

💬相關(guān)

emoji 膚色類(lèi)型

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

旗幟序列

旗幟序列(emoji flag sequence)

📋格式

區(qū)域指標(biāo)字母1 + 區(qū)域指標(biāo)字母2 = 2個(gè)字母組成的國(guó)家碼對(duì)應(yīng)的國(guó)旗


📝例子

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

鍵盤(pán)序列

鍵盤(pán)序列(emoji keycap sequence)

📋格式

數(shù)字 + U+FE0E + 方框 = 數(shù)字鍵盤(pán)


📝例子

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

零寬連接序列

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

目前有 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)

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。