国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

字符集與字符編碼的區(qū)別與演進(jìn)(ASCII、GBK、UNICODE)

這篇具有很好參考價(jià)值的文章主要介紹了字符集與字符編碼的區(qū)別與演進(jìn)(ASCII、GBK、UNICODE)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

0 總結(jié)

需要注意字符集和字符編碼是不同的。比如當(dāng)我們提到“數(shù)據(jù)庫使用的是unicode字符集”,這樣的說法是錯(cuò)誤的,數(shù)據(jù)庫中的數(shù)據(jù)一定要具體到某一種字符編碼,只提到字符集是沒有意義的,例如數(shù)據(jù)庫使用UFT-8編碼。

字符集:字符和字符碼的映射關(guān)系,例如在ASCII中a的字符碼就是97,表示在字符集的97號(hào)位置上是字符’a’。
字符編碼:字符與字節(jié)流的映射關(guān)系,例如在ASCII中’a’的字節(jié)流就是01100001,在UTF中根據(jù)編碼方式的不同,可能是01100001或0000000001100001。
名字解釋:

Code Point = 字符碼
Character Set = 字符集
Character Encoding = 字符編碼

1 常見編碼

1.1 單字節(jié)編碼:ASCII

ASCII使用1個(gè)字節(jié)(8個(gè)bit)來記錄一組常用字符,見下表:
字符集與字符編碼的區(qū)別與演進(jìn)(ASCII、GBK、UNICODE)

例如其中字母a的二進(jìn)制位:1100 001 = 97,那么a在計(jì)算機(jī)中就可以用1100001來保存。

注意上表中其實(shí)只使用了7個(gè)二進(jìn)制位,最高位b8沒有使用。

所以目前ASCII只使用7個(gè)二進(jìn)制位保存128個(gè)字符,還有128個(gè)位置未使用。

1.2 單字節(jié)編碼:ASCII擴(kuò)展OEM字符集

對(duì)于ASCII的第一次擴(kuò)展:OEM(IBM PC)字符集,實(shí)際上就是使用了ASCII后面的128個(gè)位置,還是單字節(jié)字符集。

下面列舉兩種常用的:

ISO/IEC 8859-1:1998,又稱Latin-1或“西歐語言”
字符集與字符編碼的區(qū)別與演進(jìn)(ASCII、GBK、UNICODE)

ISO/IEC 8859-2:1999,又稱Latin-2或“中歐語言”
字符集與字符編碼的區(qū)別與演進(jìn)(ASCII、GBK、UNICODE)
對(duì)于拉丁語國家,除了我們熟知的a-z、A-Z之外,還存在衍生拉丁字母:

á	é	í	ó	ú	Y	à	è	ì	ò	ù	?	ê	?	?	?	?	?	?	?	ü	?
á	é	í	ó	ú	y	à	è	ì	ò	ù	a	ê	?	?	?	?	?	?	?	ü	?

?	?	?	?	?	?	?	?	?	?	?	?	?	?	T
?	?	?	?	?	?	?	?	?	?	?	?	?	?	t

可以看到,對(duì)于拉丁語系國家,單字節(jié)可以覆蓋所有字符,Latin編碼足夠使用了。

但是對(duì)于非拉丁語系國家,例如漢語,單字節(jié)編碼的256個(gè)位置是遠(yuǎn)遠(yuǎn)不夠的。

1.3 雙字節(jié)編碼:大五碼、GB碼

單字節(jié)編碼在中文環(huán)境中顯然是不夠用的,中文區(qū)的標(biāo)準(zhǔn)編碼是GB系列。

  • 大五碼是早期繁體中文的事實(shí)標(biāo)準(zhǔn),基本被GB碼取代。
  • GB碼初代沒有包含繁體,到今天的國家標(biāo)準(zhǔn)GB18030已經(jīng)囊括了基本所有中、少數(shù)民族、日、韓漢字。
    • 演進(jìn):GB2312(2字節(jié))→擴(kuò)展繁體字→GBK(2字節(jié))→擴(kuò)展少數(shù)民族中日韓等→GB18030國家標(biāo)準(zhǔn)(4字節(jié))。
    • 注意GBK都是向下兼容的,即GB18030兼容GB2312,因?yàn)槭褂玫木幋a位置沒有重疊。

1.3.1 大五碼

Big5碼是一套雙位元組字符集,使用了雙八碼儲(chǔ)存方法,以兩個(gè)字節(jié)來安放一個(gè)字。第一個(gè)字節(jié)稱為“高位字節(jié)”,第二個(gè)字節(jié)稱為“低位字節(jié)”。

“高位字節(jié)”使用了0x81-0xFE,“低位字節(jié)”使用了0x40-0x7E,及0xA1-0xFE。在Big5的分區(qū)中:

0x8140-0xA0FE 保留給使用者自定義字元(造字區(qū))
0xA140-0xA3BF 標(biāo)點(diǎn)符號(hào)、希臘字母、特殊符號(hào),包括在0xA259-0xA261,安放了九個(gè)計(jì)量用漢字:兙兛兞兝兡兣嗧瓩糎。
0xA3C0-0xA3FE 保留。此區(qū)沒有開放作造字區(qū)用。
0xA440-0xC67E 常用漢字(5401字),字集來源除教育部“常用國字標(biāo)準(zhǔn)字體表”所列4808字外,并優(yōu)先收編國中、國小教科書中常用字587字及異體字6字。先按筆畫再按部首排序。
0xC6A1-0xC8FE 保留給使用者自定義字元(造字區(qū))
0xC940-0xF9D5 次常用漢字(7652字),字集來源除教育部“次常用國字標(biāo)準(zhǔn)字體表”所列6330字外,并篩選編入教育部“罕用國字標(biāo)準(zhǔn)字體表”表中使用頻率較高之1320字。亦是先按筆畫再按部首排序。
0xF9D6-0xF9DC 七個(gè)倚天外字集的擴(kuò)充字:碁銹裏墻恒粧嫺(此七字分別為“棋鏽裡牆恆妝嫻”之異體字)
0xF9DD-0xFEFE 保留給使用者自定義字元(造字區(qū))

1.3.2 GBK

字符有一字節(jié)和雙字節(jié)編碼,007F范圍內(nèi)是第一個(gè)字節(jié),和ASCII保持一致,此范圍內(nèi)嚴(yán)格上說有96個(gè)文字和32個(gè)控制符號(hào)。

之后的雙字節(jié)中,前一字節(jié)是雙字節(jié)的第一位??傮w上說第一字節(jié)的范圍是81FE(也就是不含80FF),第二字節(jié)的一部分領(lǐng)域在407E,其他領(lǐng)域在80FE

具體來說,定義的是下列字節(jié):

范圍 第1字節(jié) 第2字節(jié) 編碼數(shù) 字?jǐn)?shù)
水準(zhǔn)GBK/1 A1A9 A1FE 846 717
水準(zhǔn)GBK/2 B0F7 A1FE 6,768 6,763
水準(zhǔn)GBK/3 81A0 40FE (7F除外) 6,080 6,080
水準(zhǔn)GBK/4 AAFE 40A0 (7F除外) 8,160 8,160
水準(zhǔn)GBK/5 A8A9 40A0 (7F除外) 192 166
用戶定義 AAAF A1FE 564
用戶定義 F8FE A1FE 658
用戶定義 A1A7 40A0 (7F除外) 672
合計(jì): 23,940 21,886

2 字符集標(biāo)準(zhǔn)

可以理解為標(biāo)準(zhǔn)是一套字符集的集合,根據(jù)本地化的規(guī)則選擇使用哪個(gè)字符集。

注意這些標(biāo)準(zhǔn)互相是不兼容的。

2.1 ANSI

與字符集不同,另一個(gè)維度的概念是字符集標(biāo)準(zhǔn):由于不同的地區(qū)定義了大量不同的字符集,就拿單字節(jié)編碼的字符集來說,就有ASCII、latin等等,雖然前128個(gè)字符一樣,但后128個(gè)字符就完全不同了。
標(biāo)準(zhǔn)協(xié)會(huì)選擇了一些比較常用的單字節(jié)編碼作為ANSI標(biāo)準(zhǔn),ANSI不指定某一種具體的字符集,而是根據(jù)系統(tǒng)locale選擇具體使用哪一種單字節(jié)字符集。

ANSI沒有固定字符集。

2.2 ISO 8859-1

ISO 8859-1 也是一種編碼標(biāo)準(zhǔn),由歐洲開發(fā)。長度也是一個(gè)字節(jié),前 0~127 與 ASCII 一致,剩下的128個(gè)字符大多是歐洲語言所使用的字符,所以可以認(rèn)為ISO 8859-1是為歐洲語言所定制的一套編碼標(biāo)準(zhǔn)。一般情況ISO 8859-1標(biāo)準(zhǔn)會(huì)使用Latin 1。

2.3 GBK

事實(shí)上我們使用的GBK、GB18030都是標(biāo)準(zhǔn),但由于我們的標(biāo)準(zhǔn)只對(duì)應(yīng)一套特定的字符集,所以可以認(rèn)為GBK就是字符集。

3 大統(tǒng)一

字符集、標(biāo)準(zhǔn)種類繁多,但是無論使用哪一種字符集,都無法做到顯示任意國家的字符,所以u(píng)nicode字符集出現(xiàn)了。

3.1 unicode

unicode使用4字節(jié)共32個(gè)二進(jìn)制位,為每個(gè)字符都確定了一個(gè)唯一的編碼,由于整體搜索空間龐大,實(shí)際使用的量比較少。所以將整體分為了17組,叫做字符平面。平時(shí)使用0號(hào)平面即可覆蓋大部分場景。0號(hào)平面也叫做基本多文種平面(Basic Multilingual Plane, BMP)。

from wiki:

字符集與字符編碼的區(qū)別與演進(jìn)(ASCII、GBK、UNICODE)

部分0號(hào)平面的分布:字符集與字符編碼的區(qū)別與演進(jìn)(ASCII、GBK、UNICODE)

3.2 字符碼與字符編碼解耦

強(qiáng)映射的問題

傳統(tǒng)編碼中,字符碼與字符編碼是完全綁定的,例如在ASCII中,'a’的字符碼是97,'a’的字符編碼也是97。

在輸入’a’時(shí),系統(tǒng)直接映射為0110 0001存入即可,這種強(qiáng)映射方式好處是使用簡單,快捷。但缺點(diǎn)是不靈活,每個(gè)字符碼編碼出的結(jié)果是固定的,如果存在這樣一個(gè)場景:unicode四個(gè)字節(jié)中,英文字母只占很少的一部分,如果客戶只使用英文,unicode中永遠(yuǎn)只有1個(gè)字節(jié)的數(shù)據(jù)是有意義的,剩下三個(gè)字節(jié)都沒用到,但是強(qiáng)映射的方式下,數(shù)據(jù)傳輸、存儲(chǔ)只能用4個(gè)字節(jié),造成非常大的浪費(fèi)。

unicode將字符碼與編碼解耦

在unicode中,每一個(gè)字符保證有唯一字符碼,將 字符碼到存儲(chǔ)二進(jìn)制之間的“字符編碼”過程獨(dú)立出來,提供了三種編碼方法:

  • UTF-8:使用1或2或3或4個(gè)字節(jié)。
  • UTF-16:使用2或4個(gè)字節(jié)
  • UTF-32:固定使用4個(gè)字節(jié)。
    字符集與字符編碼的區(qū)別與演進(jìn)(ASCII、GBK、UNICODE)

例如a在UTF-16下編碼為0x0061占用兩個(gè)字節(jié),在UTF-8下編碼為0x61占用一個(gè)字節(jié)。

4 總結(jié)

需要注意字符集和字符編碼是不同的。比如當(dāng)我們提到“數(shù)據(jù)庫使用的是unicode字符集”,這樣的說法是錯(cuò)誤的,數(shù)據(jù)庫中的數(shù)據(jù)一定要具體到某一種字符編碼,只提到字符集是沒有意義的,例如數(shù)據(jù)庫使用UFT-8編碼。

  1. 字符集:字符和字符碼的映射關(guān)系,例如在ASCII中a的字符碼就是97,表示在字符集的97號(hào)位置上是字符’a’。
  2. 字符編碼:字符與字節(jié)流的映射關(guān)系,例如在ASCII中’a’的字節(jié)流就是01100001,在UTF中根據(jù)編碼方式的不同,可能是011000010000000001100001

名字解釋:

  • Code Point = 字符碼
  • Character Set = 字符集
  • Character Encoding = 字符編碼

5 Postgresql中的字符集

再看PG服務(wù)端支持的字符集支持,可以看到Name部分都是具體的字符編碼方法,最通用的就是UTF8,支持所有語言,空間占用1-4字節(jié)。

截取部分:文章來源地址http://www.zghlxwxcb.cn/news/detail-417810.html

Name Description Language Server? ICU? Bytes/Char Aliases
BIG5 Big Five Traditional Chinese No No 1–2 WIN950, Windows950
EUC_CN Extended UNIX Code-CN Simplified Chinese Yes Yes 1–3
EUC_JP Extended UNIX Code-JP Japanese Yes Yes 1–3
EUC_JIS_2004 Extended UNIX Code-JP, JIS X 0213 Japanese Yes No 1–3
EUC_KR Extended UNIX Code-KR Korean Yes Yes 1–3
EUC_TW Extended UNIX Code-TW Traditional Chinese, Taiwanese Yes Yes 1–3
GB18030 National Standard Chinese No No 1–4
GBK Extended National Standard Simplified Chinese No No 1–2 WIN936, Windows936
ISO_8859_5 ISO 8859-5, ECMA 113 Latin/Cyrillic Yes Yes 1
ISO_8859_6 ISO 8859-6, ECMA 114 Latin/Arabic Yes Yes 1
ISO_8859_7 ISO 8859-7, ECMA 118 Latin/Greek Yes Yes 1
ISO_8859_8 ISO 8859-8, ECMA 121 Latin/Hebrew Yes Yes 1
LATIN1 ISO 8859-1, ECMA 94 Western European Yes Yes 1 ISO88591
LATIN2 ISO 8859-2, ECMA 94 Central European Yes Yes 1 ISO88592
LATIN3 ISO 8859-3, ECMA 94 South European Yes Yes 1 ISO88593
LATIN4 ISO 8859-4, ECMA 94 North European Yes Yes 1 ISO88594
LATIN5 ISO 8859-9, ECMA 128 Turkish Yes Yes 1 ISO88599
LATIN6 ISO 8859-10, ECMA 144 Nordic Yes Yes 1 ISO885910
LATIN7 ISO 8859-13 Baltic Yes Yes 1 ISO885913
LATIN8 ISO 8859-14 Celtic Yes Yes 1 ISO885914
LATIN9 ISO 8859-15 LATIN1 with Euro and accents Yes Yes 1 ISO885915
LATIN10 ISO 8859-16, ASRO SR 14111 Romanian Yes No 1 ISO885916
SJIS Shift JIS Japanese No No 1–2 Mskanji, ShiftJIS, WIN932, Windows932
SQL_ASCII unspecified (see text) any Yes No 1
UTF8 Unicode, 8-bit all Yes Yes 1–4 Unicode

到了這里,關(guān)于字符集與字符編碼的區(qū)別與演進(jìn)(ASCII、GBK、UNICODE)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • LCD-STM32液晶顯示中英文-(6.unicode字符集)

    LCD-STM32液晶顯示中英文-(6.unicode字符集)

    目錄 Unicode字符集和編碼 UTF-32 UTF-16 UTF-8(重點(diǎn):必須掌握) BOM ANSI ????????由于各個(gè)國家或地區(qū)都根據(jù)使用自己的文字系統(tǒng)制定標(biāo)準(zhǔn),同一個(gè)編碼在不同的標(biāo)準(zhǔn)里表示不一樣的字符,各個(gè)標(biāo)準(zhǔn)互不兼容,而又沒有一個(gè)標(biāo)準(zhǔn)能夠囊括所有的字符,即無法用一個(gè)標(biāo)準(zhǔn)表達(dá)所有

    2024年02月16日
    瀏覽(22)
  • 算法加密與解密、字符編碼與字符集

    算法加密與解密、字符編碼與字符集

    加密保證數(shù)據(jù)不會(huì)被竊取或者修改 哈希算法 壓縮映射 :散列又稱為哈希,是把任意長度的輸入通過散列算法變換成固定長度的輸出,該輸出就是散列值。 哈希算法(Hash)又稱摘要算法(Digest),哈希算法的目的就是為了驗(yàn)證原始數(shù)據(jù)是否被篡改。 主流的散列算法有MD5和

    2024年02月03日
    瀏覽(26)
  • Linux的字符集及編碼

    Linux的字符集及編碼

    Linux 字符集設(shè)置 1、查詢 (1) 查看當(dāng)前服務(wù)器字符集: ?# locale? (2) 查看服務(wù)器支持的字符集: ?# locale -a 2、修改linux系統(tǒng)字符集的方式有如下兩種: (1) 直接設(shè)置變量的方式修改,命令如下兩條命令: [root~]# LANG=\\\"xxx\\\" 或者 ?export ?LANG=\\\"xxx\\\"? [root?~]# LC_ALL=\\\"xxx\\\" ?或者 ?export LC_ALL

    2024年02月09日
    瀏覽(23)
  • VScode中怎么設(shè)置默認(rèn)字符集編碼

    VScode中怎么設(shè)置默認(rèn)字符集編碼

    《AUTOSAR譜系分解(ETAS工具鏈)》之總目錄

    2024年02月03日
    瀏覽(36)
  • GB 2312字符集:中文編碼的基石

    GB 2312字符集:中文編碼的基石

    GB 2312字符集是中國國家標(biāo)準(zhǔn)委員會(huì)于1980年發(fā)布的一種中文字符集,是中國大陸最早的中文字符集之一。GB 2312字符集的發(fā)布填補(bǔ)了中國大陸中文編碼的空白,為中文信息處理提供了基礎(chǔ)。 標(biāo)準(zhǔn)中文電碼查詢 | 一個(gè)覆蓋廣泛主題工具的高效在線平臺(tái)(amd794.com) https://amd794.com/chi

    2024年03月09日
    瀏覽(25)
  • 【MySQL】關(guān)于數(shù)據(jù)庫字符編碼以及字符集排序相關(guān)知識(shí)

    通過設(shè)置表的字符集和排序規(guī)則,解決MySQL查詢時(shí)不區(qū)分字母大小寫、插入時(shí)不支持特殊字符的問題。 關(guān)于MySQL查詢時(shí)不區(qū)分字母大小寫、插入時(shí)不支持特殊字符的問題,只有修改表的字符集和排序規(guī)則才能根治,而且事半功倍。utf8mb4支持的最低mysql版本為5.5.3+,若不是,請(qǐng)

    2024年02月12日
    瀏覽(37)
  • (二)java.sql.SQLException: 不支持的字符集 (在類路徑中添加 orai18n.jar): ZHS16GBK

    (二)java.sql.SQLException: 不支持的字符集 (在類路徑中添加 orai18n.jar): ZHS16GBK

    不支持的字符集 (在類路徑中添加 orai18n.jar): ZHS16GBK (一)SQL state [99999]; error code [17056]; 不支持的字符集 (在類路徑中添加 orai18n.jar): ZHS16GBK; nested exception (二)java.sql.SQLException: 不支持的字符集 (在類路徑中添加 orai18n.jar): ZHS16GBK java.sql.SQLException: 不支持的字符集 (在類路

    2024年02月09日
    瀏覽(21)
  • Redis如何把字符集的編碼格式設(shè)置為UTF-8

    Redis如何把字符集的編碼格式設(shè)置為UTF-8

    一、問題復(fù)現(xiàn)(編碼錯(cuò)亂) ? ? ? ? 剛安裝好的redis在使用的過程中,若使用到了漢字,則在顯示的時(shí)候,漢字是不能夠正常顯示的,因?yàn)閞edis在解析的過程中,會(huì)將漢字轉(zhuǎn)換成其他編碼的格式,如下圖: 二、Redis支持哪些類型的編碼? ????????Redis是一款開源的內(nèi)存數(shù)據(jù)

    2024年02月02日
    瀏覽(20)
  • 達(dá)夢數(shù)據(jù)庫支持GB18030-2022中文編碼字符集證明方法

    達(dá)夢數(shù)據(jù)庫支持GB18030-2022中文編碼字符集證明方法

    既然是證明就要做到有圖有真相。 證明途徑1:系統(tǒng)概覽法 查看達(dá)夢數(shù)據(jù)庫“管理工具”-“對(duì)象導(dǎo)航”-“管理服務(wù)器”-“系統(tǒng)概覽”-“字符集編碼”-”GB18030”. 看見”GB18030”字樣就是證據(jù)之一。如果你沒有看見這個(gè)字樣,而是UTF8等其他字樣,請(qǐng)重新安裝產(chǎn)品吧,安裝向?qū)?/p>

    2023年04月18日
    瀏覽(23)
  • (一)SQL state [99999]; error code [17056]; 不支持的字符集 (在類路徑中添加 orai18n.jar): ZHS16GBK; nested exception

    不支持的字符集 (在類路徑中添加 orai18n.jar): ZHS16GBK (一)SQL state [99999]; error code [17056]; 不支持的字符集 (在類路徑中添加 orai18n.jar): ZHS16GBK; nested exception (二)java.sql.SQLException: 不支持的字符集 (在類路徑中添加 orai18n.jar): ZHS16GBK 目錄 一、報(bào)錯(cuò)解答 1、報(bào)錯(cuò) 2、背景 3、原

    2024年02月14日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包