AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

ASCII、Unicode、UTF-8、utf8mb4,有啥區(qū)別?

來(lái)源: 責(zé)編: 時(shí)間:2024-05-29 17:29:07 125觀看
導(dǎo)讀什么是字符集?什么是編碼?什么是解碼?它們之間有什么關(guān)系?ASCII、Unicode、UTF-8、ISO-8859-1、GB2312,這些在計(jì)算中常見(jiàn)的名詞,它們代表的真正含義是什么?這篇文章幫你講透!字符集字符集(Character Set)是字符的一個(gè)集合,包含字

什么是字符集?什么是編碼?什么是解碼?它們之間有什么關(guān)系?ASCII、Unicode、UTF-8、ISO-8859-1、GB2312,這些在計(jì)算中常見(jiàn)的名詞,它們代表的真正含義是什么?這篇文章幫你講透!MCt28資訊網(wǎng)——每日最新資訊28at.com

MCt28資訊網(wǎng)——每日最新資訊28at.com

字符集

字符集(Character Set)是字符的一個(gè)集合,包含字母、數(shù)字、標(biāo)點(diǎn)符號(hào)、控制字符、中文以及其他符號(hào)。常見(jiàn)的字符集包括:MCt28資訊網(wǎng)——每日最新資訊28at.com

  • ASCII字符集(American Standard Code for Information Interchange,美國(guó)標(biāo)準(zhǔn)信息交換碼):總共 128個(gè)字符,包括英文字母、數(shù)字、一些特殊符號(hào)和控制字符
  • ISO-8859-1:擴(kuò)展了ASCII,包含 256個(gè)字符,支持西歐語(yǔ)言的字符
  • GB2312:中國(guó)定義的一個(gè)標(biāo)準(zhǔn),包含了 7445個(gè)字符,6763個(gè)漢字和 682個(gè)非漢字字符
  • GBK:中國(guó)定義的一個(gè)標(biāo)準(zhǔn),支持 21003個(gè)漢字和圖形字符,涵蓋了漢字、日文假名、韓文、特殊符號(hào)等,兼容 GB2312
  • GB18030:中國(guó)定義的一個(gè)標(biāo)準(zhǔn),支持 70000多個(gè)字符,兼容 ASCII、GB2312、GBK等多種編碼方案
  • Unicode:包含了全球幾乎所有書(shū)寫(xiě)系統(tǒng)的 110多萬(wàn)個(gè)字符,它提供一個(gè)統(tǒng)一的字符編碼標(biāo)準(zhǔn),支持所有語(yǔ)言
  • Big5字符集:包含 13053個(gè)繁體中文漢字和其他字符,主要用于臺(tái)灣和香港

編碼和解碼

1.編碼

編碼(Encoding)是將字符集中的字符轉(zhuǎn)換為計(jì)算機(jī)可以處理的二進(jìn)制數(shù)據(jù)的規(guī)則或方案。不同的編碼方式會(huì)使用不同的二進(jìn)制模式來(lái)表示同一個(gè)字符。常見(jiàn)的編碼方式包括:MCt28資訊網(wǎng)——每日最新資訊28at.com

  • ASCII編碼:使用 7位二進(jìn)制數(shù)表示字符
  • UTF-8:一種 Unicode編碼方式,使用1到4個(gè)字節(jié)來(lái)表示一個(gè)字符。UTF-8是目前最廣泛使用的編碼方式,具有向后兼容 ASCII的特點(diǎn)
  • UTF-16:一種 Unicode編碼方式,使用2或4個(gè)字節(jié)表示一個(gè) Unicode字符(不常用)
  • UTF-32:一種 Unicode編碼方式,使用固定的 4個(gè)字節(jié)表示一個(gè) Unicode字符(不常用)
  • GB2312:一種為簡(jiǎn)體中文設(shè)計(jì)的編碼方式,使用1或2個(gè)字節(jié)表示一個(gè) Unicode字符(不常用)
  • GBK:一種為簡(jiǎn)體中文設(shè)計(jì)的編碼方式,使用1或2個(gè)字節(jié)表示一個(gè) GBK字符
  • Big5:一種主要用于臺(tái)灣和香港的繁體字符集,使用雙字節(jié)來(lái)存儲(chǔ) Big5字符集

MCt28資訊網(wǎng)——每日最新資訊28at.com

2.解碼

解碼(Decoding)是將編碼后的數(shù)據(jù)還原為其原始格式的過(guò)程,解碼通常是編碼的逆過(guò)程。MCt28資訊網(wǎng)——每日最新資訊28at.com

通過(guò)上面的描述可以知道:GB2312,GBK,GB18030 它即包含一套字符集,也包含了對(duì)應(yīng)的一套編解碼。MCt28資訊網(wǎng)——每日最新資訊28at.com

ASCII碼

計(jì)算機(jī)起源于美國(guó),計(jì)算機(jī)內(nèi)部使用的是二進(jìn)制(0/1),而美國(guó)的通用的語(yǔ)言是英文,于是,為了規(guī)范英語(yǔ)字符與二進(jìn)制位之間的關(guān)系,在上個(gè)世紀(jì)60年代,美國(guó)制定了一套字符編碼,這就是一直沿用至今的 ASCII 碼。MCt28資訊網(wǎng)——每日最新資訊28at.com

在英語(yǔ)里,除了 26個(gè)英文字母的大小寫(xiě),再加上一些通用的符號(hào),總共 128個(gè)字符(包括 32個(gè)不能打印的控制符號(hào)),因此,ASCII碼也定義了與之對(duì)應(yīng)的 128個(gè)編碼,比如,字母 A的 ASCII碼是十進(jìn)制 65(二進(jìn)制:01000001)。MCt28資訊網(wǎng)——每日最新資訊28at.com

對(duì)于 128=2? 個(gè)字符,只需要一個(gè)字節(jié)就能存儲(chǔ)(1byte = 8bit),而且只需要占用了一個(gè)字節(jié)的后面7 位,因此,ASCII碼規(guī)定二進(jìn)制的最前面的一位統(tǒng)一為 0。如下為一張 ASCII碼表:MCt28資訊網(wǎng)——每日最新資訊28at.com

MCt28資訊網(wǎng)——每日最新資訊28at.com

所以,ASCII碼是為了英語(yǔ)使用者能夠把常用的 128個(gè)字符存儲(chǔ)在計(jì)算機(jī)中而設(shè)置的一套規(guī)則。MCt28資訊網(wǎng)——每日最新資訊28at.com

GB2312

ASCII碼的設(shè)計(jì)很優(yōu)秀,但對(duì)于中文使用者,怎么能接受計(jì)算機(jī)存儲(chǔ)不了中文的現(xiàn)實(shí)?于是,聰明的中國(guó)人在 1980年發(fā)布了一套適用自己的新編準(zhǔn):GB2312。MCt28資訊網(wǎng)——每日最新資訊28at.com

GB2312 是中華人民共和國(guó)國(guó)家標(biāo)準(zhǔn)《信息交換用漢字編碼字符集 基本集》的簡(jiǎn)稱(chēng),全稱(chēng)為 GB 2312-1980。該標(biāo)準(zhǔn)定義了用于簡(jiǎn)體中文字符和一些其他字符的編碼方法,而且兼容 ASCII,廣泛應(yīng)用于中文信息處理系統(tǒng)中。MCt28資訊網(wǎng)——每日最新資訊28at.com

GB2312是一個(gè)雙字節(jié)編碼字符集,即 GB2312中的所有字符都使用兩個(gè)字節(jié)進(jìn)行編碼和存儲(chǔ),具體編碼結(jié)構(gòu)如下:MCt28資訊網(wǎng)——每日最新資訊28at.com

1.字符范圍

GB2312 總共有 7445個(gè)字符,主要包括 6763個(gè)漢字和 682個(gè)非漢字字符(如 ASCII、拉丁字母、希臘字母、日文假名、符號(hào)等)。具體分為以下兩個(gè)部分:MCt28資訊網(wǎng)——每日最新資訊28at.com

  • 一級(jí)漢字:3755個(gè)常用漢字,按拼音順序排列
  • 二級(jí)漢字:3008個(gè)次常用漢字,按部首/筆畫(huà)順序排列
  • 非漢字字符:682個(gè),包括圖形符號(hào)、拉丁字母、日文假名、希臘字母、俄文字母、制表符、標(biāo)點(diǎn)符號(hào)等。

2.編碼區(qū)間

  • GB2312 將字符集劃分為 94個(gè)區(qū)(1-94),每區(qū)包含 94個(gè)位置(1-94)
  • 每個(gè)字符由兩個(gè)字節(jié)表示,第一個(gè)字節(jié)(高字節(jié))表示區(qū)號(hào),第二個(gè)字節(jié)(低字節(jié))表示位置號(hào)
  • 第一個(gè)字節(jié)范圍:0xA1 - 0xF7
  • 第二個(gè)字節(jié)范圍:0xA1 - 0xFE

3.舉例說(shuō)明

GB2312 編碼表可以通過(guò)下面這兩個(gè)特定的公式計(jì)算得到:MCt28資訊網(wǎng)——每日最新資訊28at.com

  • 高字節(jié):0xA1 + 區(qū)號(hào) - 1
  • 低字節(jié):0xA1 + 位置號(hào) - 1

以“你好” 為例來(lái)演示:MCt28資訊網(wǎng)——每日最新資訊28at.com

“你”在 GB2312編碼表中位于第 36區(qū)第 67位:MCt28資訊網(wǎng)——每日最新資訊28at.com

高字節(jié):0xA1 + 36 - 1 = 0xC4低字節(jié):0xA1 + 67 - 1 = 0xE3因此,"你"的 GB2312編碼為 0xC4E3,和 GB2312編碼表中的值可以對(duì)應(yīng)上。

MCt28資訊網(wǎng)——每日最新資訊28at.com

“好”在 GB2312編碼表中位于第 26區(qū)第 35位:MCt28資訊網(wǎng)——每日最新資訊28at.com

高字節(jié):0xA1 + 26 - 1 = 0xBA低字節(jié):0xA1 + 35 - 1 = 0xC3因此,"好"的 GB2312編碼是 0xBAC3,和 GB2312編碼表中的值可以對(duì)應(yīng)上。

MCt28資訊網(wǎng)——每日最新資訊28at.com

GBK

隨著互聯(lián)網(wǎng)的快速發(fā)展,GB2312編碼表中定義的字符已經(jīng)不夠用了,因此,GB2312的擴(kuò)展版 GBK編碼表誕生了。MCt28資訊網(wǎng)——每日最新資訊28at.com

GBK是“國(guó)標(biāo)擴(kuò)展字符集”前 3個(gè)漢字拼音首字母的縮寫(xiě),全稱(chēng)是《漢字內(nèi)碼擴(kuò)展規(guī)范》(Chinese Internal Code Extension, GBK)。GBK字符集是 1993年發(fā)布的,它是對(duì) GB2312的擴(kuò)展。MCt28資訊網(wǎng)——每日最新資訊28at.com

GBK是一個(gè)雙字節(jié)編碼字符集,每個(gè)字符由一個(gè)或兩個(gè)字節(jié)表示。其編碼結(jié)構(gòu)如下:MCt28資訊網(wǎng)——每日最新資訊28at.com

1.字符范圍

  • GBK支持 21003個(gè)漢字和圖形字符,涵蓋了漢字、日文假名、韓文、特殊符號(hào)等
  • 包括 GB2312的全部字符,以及其他新增的漢字和符號(hào)

2.編碼區(qū)間

① GBK擴(kuò)展了 GB2312的編碼范圍,使其支持更多字符MCt28資訊網(wǎng)——每日最新資訊28at.com

② 單字節(jié)部分(與 ASCII兼容):0x00 - 0x7FMCt28資訊網(wǎng)——每日最新資訊28at.com

③雙字節(jié)部分:MCt28資訊網(wǎng)——每日最新資訊28at.com

  • 第一個(gè)字節(jié)范圍:0x81 - 0xFE
  • 第二個(gè)字節(jié)范圍:0x40 - 0xFE(去掉 0x7F)

3.舉例說(shuō)明

  • 單字節(jié):字符“A”,使用單個(gè)字節(jié)可以存儲(chǔ),“A”的 ASCII碼十進(jìn)制是65,轉(zhuǎn)換成十六進(jìn)制為:0x41,二進(jìn)制為:1000001
  • 雙字節(jié):字符“漢”在 GBK編碼中使用雙字節(jié)表示,GBK編碼: BABA,分成兩個(gè)字節(jié)表示成:0xBA 0xBA

GB18030

GB18030 是國(guó)家標(biāo)準(zhǔn)化委員會(huì)(SAC)發(fā)布的字符編碼標(biāo)準(zhǔn),是一種用于漢字、漢語(yǔ)拼音、注音符號(hào)和漢字部首等文字的字符集和編碼方案,它是繼 GB2312和 GBK 后更強(qiáng)筋的版本。MCt28資訊網(wǎng)——每日最新資訊28at.com

GB18030的特點(diǎn)包括:MCt28資訊網(wǎng)——每日最新資訊28at.com

  • 兼容性:GB18030兼容ASCII、GB2312、GBK以及Unicode等多種編碼方案。
  • 完備性:GB18030收錄了70000多個(gè)字符,包括漢字、漢語(yǔ)拼音、注音符號(hào)、漢字部首、拉丁字母、數(shù)字、標(biāo)點(diǎn)符號(hào)等。
  • 可擴(kuò)展性:GB18030采用了四字節(jié)編碼方案,可以容納未來(lái)出現(xiàn)的所有字符。其中漢字使用雙字節(jié)或四字節(jié)編碼,而非漢字字符則使用單字節(jié)或雙字節(jié)編碼。

ISO-8859-1

ISO-8859-1,全稱(chēng)為”ISO/IEC 8859-1”,是國(guó)際標(biāo)準(zhǔn)化組織(ISO)和國(guó)際電工委員會(huì)(IEC)發(fā)布的字符編碼標(biāo)準(zhǔn)之一,也被稱(chēng)為 Latin-1或 Western European (ISO)。它是 ISO-8859系列中的第一個(gè)字符編碼標(biāo)準(zhǔn),旨在支持西歐地區(qū)的主要語(yǔ)言,如英語(yǔ)、法語(yǔ)、德語(yǔ)、西班牙語(yǔ)等。MCt28資訊網(wǎng)——每日最新資訊28at.com

ISO-8859-1的特點(diǎn)包括:MCt28資訊網(wǎng)——每日最新資訊28at.com

  • 單字節(jié)編碼:ISO-8859-1采用單字節(jié)編碼方案,即每個(gè)字符占用一個(gè)字節(jié)(8位),可以表示 256個(gè)不同的字符
  • 西歐語(yǔ)言支持:該編碼標(biāo)準(zhǔn)主要針對(duì)西歐地區(qū)的語(yǔ)言,覆蓋了西歐語(yǔ)言中常用的字符、標(biāo)點(diǎn)符號(hào)和特殊符號(hào)
  • ASCII兼容:ISO-8859-1是 ASCII編碼的擴(kuò)展,完全兼容 ASCII

 ISO-8859-1的一些限制:MCt28資訊網(wǎng)——每日最新資訊28at.com

  • 不支持非拉丁字符集:ISO-8859-1無(wú)法表示除拉丁字母外的字符,因此對(duì)于不使用拉丁字母的語(yǔ)言,如希臘語(yǔ)、俄語(yǔ)等,需要使用其他字符編碼標(biāo)準(zhǔn)
  • 只支持 256個(gè)字符,表示的字符范圍比較小

總的來(lái)說(shuō),ISO-8859-1是一個(gè)針對(duì)西歐語(yǔ)言的基本字符編碼標(biāo)準(zhǔn),雖然在全球范圍內(nèi)的使用逐漸減少,但在某些特定的場(chǎng)景和遺留系統(tǒng)中仍然可能會(huì)遇到。MCt28資訊網(wǎng)——每日最新資訊28at.com

Unicode

上面介紹的字符集,要么是為英語(yǔ)或者西歐使用者設(shè)計(jì)的,要么是兼容漢字但對(duì)其他語(yǔ)言不友好,因此,有沒(méi)有一種全球通用并且包含全球所有通用的字符呢?MCt28資訊網(wǎng)——每日最新資訊28at.com

于是,Unicode字符集誕生了!MCt28資訊網(wǎng)——每日最新資訊28at.com

1.Unicode是什么

Unicode,正如它的中文意思“統(tǒng)一碼”一樣,它包含了世界上所有的通用符號(hào)(超過(guò) 110多萬(wàn)個(gè)符號(hào)),而且給每個(gè)符號(hào)賦予一個(gè)獨(dú)一無(wú)二的編碼,通常表示為:U+后跟一個(gè)十六進(jìn)制數(shù),例如,U+56fd 表示漢字的“國(guó)”,U+0639 表示阿拉伯字母 Ain,U+0041 表示英語(yǔ)的字母 A等。MCt28資訊網(wǎng)——每日最新資訊28at.com

2.Unicode存在的問(wèn)題

Unicode盡管包含了全球所有通用的字符,但它只是統(tǒng)一了所有的字符集,也就是說(shuō)它只規(guī)定了符號(hào)的二進(jìn)制代碼格式,卻沒(méi)有規(guī)定這個(gè)二進(jìn)制代碼應(yīng)該如何存儲(chǔ)(編解碼)。MCt28資訊網(wǎng)——每日最新資訊28at.com

比如,Unicode 包含的這些字符集中,有的 1個(gè)字節(jié)能存儲(chǔ),有的 2個(gè)字節(jié)能存儲(chǔ),有的需要 4個(gè)字節(jié)才能存儲(chǔ),因此,對(duì)于一個(gè) Unicode字符,計(jì)算機(jī)如何知道需要采用幾個(gè)字節(jié)來(lái)存儲(chǔ)?基于此局面,急需一套統(tǒng)一的編碼方式。MCt28資訊網(wǎng)——每日最新資訊28at.com

UTF-8

對(duì)于 Unicode字符集,通常有 UTF-8,UTF-16,UTF-32等編碼方式。MCt28資訊網(wǎng)——每日最新資訊28at.com

UTF,Unicode Transformation Format(Unicode 轉(zhuǎn)換格式),而 UTF-8是目前互聯(lián)網(wǎng)上使用最廣的一種 Unicode實(shí)現(xiàn)方式,因此,本文重點(diǎn)分析 UTF-8。MCt28資訊網(wǎng)——每日最新資訊28at.com

1.可變長(zhǎng)度

UTF-8 是一種變長(zhǎng)的編碼方式,使用 1~4個(gè)字節(jié)來(lái)表示不同的 Unicode字符:MCt28資訊網(wǎng)——每日最新資訊28at.com

  • 1 字節(jié): 用于編碼 7 位 ASCII 字符,表示范圍:U+0000 到 U+007F,與 ASCII 碼完全兼容
  • 2 字節(jié): 用于編碼 11 位字符,表示范圍:U+0080 到 U+07FF
  • 3 字節(jié): 用于編碼 16 位字符,表示范圍:U+0800 到 U+FFFF
  • 4 字節(jié): 用于編碼 21 位字符,表示范圍:U+10000 到 U+10FFFF

2.字節(jié)結(jié)構(gòu)

UTF-8 編碼的字節(jié)結(jié)構(gòu)如下:MCt28資訊網(wǎng)——每日最新資訊28at.com

1字節(jié): 0xxxxxxx2字節(jié): 110xxxxx 10xxxxxx3字節(jié): 1110xxxx 10xxxxxx 10xxxxxx4字節(jié): 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

通過(guò)上述字節(jié)結(jié)構(gòu),可以總結(jié)兩個(gè)規(guī)律:MCt28資訊網(wǎng)——每日最新資訊28at.com

  • 對(duì)于單字節(jié)的符號(hào),UTF-8編碼和 ASCII碼是相同的:第一位為 0,后面 7位為 Unicode碼
  • 對(duì)于n(n >= 2)字節(jié)的符號(hào),二進(jìn)制的第一個(gè)字節(jié),最高位有 n個(gè)“1”(“1”后面緊跟一位 0),二進(jìn)制后面的每個(gè)字節(jié),前兩位都固定為“10”,xxx部分全部是 Unicode碼

3.舉例說(shuō)明

(1) 字符 ‘A’ (U+0041)MCt28資訊網(wǎng)——每日最新資訊28at.com

分析:字符’A’的 Unicode是 U+0041,位于 U+0000 到 U+007F之間,因此,一個(gè)字節(jié)就可以表示,因此,二進(jìn)制為:01000001,轉(zhuǎn)成十六進(jìn)制為:0x41MCt28資訊網(wǎng)——每日最新資訊28at.com

(2) 字符 ‘€’ (U+20AC)MCt28資訊網(wǎng)——每日最新資訊28at.com

分析:字符 ‘€’的 Unicode是 U+20AC,位于 U+0800 到 U+FFFF之間,因此,需要用 3個(gè)字節(jié)表示,即1110xxxx 10xxxxxx 10xxxxxx,將“20AC”中的每個(gè)字符直接轉(zhuǎn)換成二進(jìn)制為:0010 0000 1010 1100,然后將它從低位往高位(從右到左)依次替換x,如下圖:MCt28資訊網(wǎng)——每日最新資訊28at.com

MCt28資訊網(wǎng)——每日最新資訊28at.com

這樣得出字符 ‘€’ (U+20AC)用 UTF-8編碼的二進(jìn)制為:11100010 10000010 10101100,轉(zhuǎn)換成十六進(jìn)制為:0xE2 0x82 0xACMCt28資訊網(wǎng)——每日最新資訊28at.com

utf8mb4

使用過(guò) MySQL數(shù)據(jù)庫(kù)的小伙伴對(duì) utf8mb4肯定不陌生,它是 MySQL數(shù)據(jù)庫(kù)中的一種字符集,具體來(lái)說(shuō)是 UTF-8的一個(gè)變種,能夠支持所有的 Unicode字符,包括那些需要 4個(gè)字節(jié)表示的字符(例如某些 emoji表情符號(hào)和一些罕見(jiàn)的漢字)。MCt28資訊網(wǎng)——每日最新資訊28at.com

在 MySQL中,utf8字符集最多支持 3個(gè)字節(jié)的字符,因此,它不能存儲(chǔ)所有的 Unicode字符,而 utf8mb4字符集支持 4個(gè)字節(jié)的字符,能夠存儲(chǔ)所有的 Unicode字符。MCt28資訊網(wǎng)——每日最新資訊28at.com

因此,在一些涉及聊天業(yè)務(wù)的場(chǎng)景,utf8mb4字符集經(jīng)常被使用,主要是用于存儲(chǔ) emoji表情,比如:

本文鏈接:http://www.tebozhan.com/showinfo-26-91516-0.htmlASCII、Unicode、UTF-8、utf8mb4,有啥區(qū)別?

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 我們一起聊聊C# 開(kāi)啟線程的四種方式

下一篇: 我們一起聊聊Typescript 泛型入門(mén)精髓

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
Top