0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

計算機編碼全解析(中)

jf_78858299 ? 來源:小余的自習(xí)室 ? 作者:小余的自習(xí)室 ? 2023-03-30 10:28 ? 次閱讀

4.MBCS、DBCS

前面說的ASCII,EASCII,ISO-8859中的每個字符使用的是8-bits表示的,所以稱為“ 單字節(jié)字符集 ”(Single-Byte Character Set,簡稱SBCS)。

但是到了亞洲,如中,日,韓等國家每個文字就是一個字符,對于單字節(jié)的字符集來,遠遠放不下了,于是亞洲國家制定了自己的字符集“多字節(jié)字符集” (Multi-Bytes Character Sets,簡稱MBCS)

windows 系統(tǒng)中,本地字符集就是MBCS,不過由于大部分字符是2字節(jié)的,所以又稱為“雙字節(jié)字符集”(Double-Bytes Character Sets,簡稱DBCS),所以有的時候看到MBCS、DBCS,都是一回事。 MBCS是完全兼容標(biāo)準(zhǔn)ASCII碼的

5.GB2312、GBK、

當(dāng)計算機被引入中國后,相關(guān)部門設(shè)計了GB系列規(guī)范(GB為國家的拼音縮寫)。按照GB系列編碼方案,在一段文本中,如果一個字節(jié)是0~127,那么這個字節(jié)的含義與ASCII編碼相同,否則,這個字節(jié)和下一個字節(jié)共同組成漢字(或是GB編碼定義的其他字符)。因此,GB系列編碼方案向下完全直接兼容ASCII編碼方案。也就是說,如果當(dāng)前文本中使用的字符全是ASCII中的字符,則其GB編碼和ASCII編碼是完成一樣的。

GB2312是最早的GB編碼格式,收入了不足一萬個漢字,基本能滿足日常需求,但是中國文件可是博大精深,區(qū)區(qū)一萬字肯定無法滿足,于是又在GB2312基礎(chǔ)上進行了擴展, 擴展后的編碼方案稱之為GBK (K是擴的拼音縮寫),后來又在GBK的基礎(chǔ)上擴了GB18030編碼方案,增加了一些少數(shù)名族的文字,一些生僻字被編到4個字節(jié)。

GB2312,GBK,GB18030(不包括GB13000)每次擴展都會完全兼容前一個版本 。這里要指出,雖然都用多個字節(jié)表示一個字符,但是GB類的漢字編碼與后文的Unicode編碼方案的UTF-8、UTF-16、UTF-32等字符編碼方式是毫無關(guān)系的

不過,也正因為不得不使用多個字節(jié)來表示一個字符,相較于只使用單個字節(jié)的ASCII編碼方案,GB系列編碼方案與后面要介紹的Unicode編碼方案一樣,無疑導(dǎo)致了更高的復(fù)雜度(包括時間復(fù)雜度、空間復(fù)雜度等)。

比如, 當(dāng)多字節(jié)字符與原先的ASCII字符混用時

  • 1) 要么將原先的ASCII字符重新編碼為多個字節(jié)表示,以便與其他多字節(jié)字符統(tǒng)一起來(UTF-16、UTF-32等采用的就是這種方法 );
  • 2)要么保持ASCII字符為單個字節(jié)編碼不變,但將其他多字節(jié)字符編碼中的各個字節(jié)的最高位(即首位)設(shè)為1,以避免與字節(jié)最高位為0的ASCII編碼相沖突(GB、UTF-8等采用的就是這種方法) 。

前者具有更高的空間復(fù)雜度,因為原先只需要單個字節(jié)表示的ASCII字符,現(xiàn)在也必須用多個字節(jié)來表示,顯然更為耗費存儲空間;后者則具有更高的時間復(fù)雜度,因為為了避免沖突以及其他種種考慮(比如擴展性、容錯性等),使用了更為復(fù)雜的編碼算法(Encoding Algorithm),無疑更為耗費計算時間。

GB2312

GB2312編碼方案,即《信息交換用漢字編碼字符集——基本集》,是由中國國家標(biāo)準(zhǔn)總局于1980年發(fā)布、1981年5月1日開始實施的一套國家標(biāo)準(zhǔn),標(biāo)準(zhǔn)號為GB2312-1980。

GB2312編碼適用于漢字處理、漢字通信等系統(tǒng)之間的信息交換,通行于中國大陸 ;新加坡等地也采用此編碼。中國大陸幾乎所有的中文系統(tǒng)和國際化的軟件都支持GB2312。

GB2312編碼為了兼容ASCII碼,所有的編碼的字節(jié)都是從0x7F之后開始的,一個漢字使用兩字節(jié)來表示,一個高字節(jié)一個低字節(jié),如果一個字節(jié)的小余0x7F的值,則表示的是一個ASCII碼值。

圖片

雖然GB2312完全兼容ASCII碼,但是其并不兼容其他擴碼,如EASCII。

GB2312標(biāo)準(zhǔn)共收錄6763個漢字,其中一級漢字3755個,二級漢字3008個;同時,除了漢字,GB2312還收錄了包括拉丁字母、希臘字母、日文平假名及片假名字符、俄語西里爾字母在內(nèi)的 682個字符 。

可能是處于美觀的考慮,除了漢字外的682個字符中,包括ASCII里本來就有的數(shù)字、標(biāo)點、字母等字符,又再次編寫了兩字長的GB2312版本。 這682個雙字節(jié)編碼字符就是常說的“全角”字符,而這些字符所對應(yīng)的單字節(jié)編碼的ASCII字符就被稱之為“半角”字符。

全角、半角

全角字符是中文顯示及雙字節(jié)中文編碼的歷史遺留問題。

早期的點陣顯示器上由于像素有限,原先ASCII西文字符的顯示寬度(比如8像素的寬度)用來顯示漢字有些捉襟見肘(實際上早期的針式打印機在打印輸出時也存在這個問題),因此就采用了兩倍于ASCII字符的顯示寬度(比如16像素的寬度)來顯示漢字。

這樣一來,ASCII西文字符在顯示時其寬度為漢字的一半。或許是為了在西文字符與漢字混合排版時,讓西文字符能與漢字對齊等視覺美觀上的考慮,于是就設(shè)計了讓西文字母、數(shù)字和標(biāo)點等特殊字符在外觀視覺上也占用一個漢字的視覺空間(主要是寬度),并且在內(nèi)部存儲上也同漢字一樣使用2個字節(jié)進行存儲的方案。這些與漢字在顯示寬度上一樣的西文字符就被稱之為全角字符。

而原來ASCII中的西文字符由于在外觀視覺上僅占用半個漢字的視覺空間(主要是寬度),并且在內(nèi)部存儲上使用1個字節(jié)進行存儲,相對于全角字符,因而被稱之為半角字符。

后來,其中的一些全角字符因為比較有用,就得到了廣泛應(yīng)用(比如全角的逗號“,”、問號“?”、感嘆號“!”、空格“”等,這些字符在輸入法中文輸入狀態(tài)下的半角與全角是一樣的,英文輸入狀態(tài)下全角跟中文輸入狀態(tài)一樣,但半角大約為全角的二分之一寬),專用于中日韓文本,成為了標(biāo)準(zhǔn)的中日韓標(biāo)點字符。而其它的許多全角字符則逐漸失去了價值(現(xiàn)在很少需要讓純文本的中文和西文字符對齊了),就很少再用了。

現(xiàn)在全球字符編碼的事實標(biāo)準(zhǔn)是Unicode字符集及基于此的UTF-8、UTF-16等編碼實現(xiàn)方式。Unicode吸納了許多遺留(legacy)編碼,并且為了兼容性而保留了所有字符。因此中文編碼方案中的這些全角字符也保留下來了,而國家標(biāo)準(zhǔn)也仍要求字體和軟件都支持這些全角字符。

不過,半角和全角字符的關(guān)系在UTF-8、UTF-16等中不再是簡單的1字節(jié)和2字節(jié)的關(guān)系了。具體參見后文。

GBK

GB2312-1980共收錄6763個漢字,覆蓋了中國大陸99.75%的使用頻率,基本滿足了漢字的計算機處理需要。

但對于人名、古漢語等方面出現(xiàn)的罕用字、生僻字,GB2312不能處理,如部分在GB2312-1980推出以后才簡化的漢字(如“啰”)、部分人名用字(如歌手陶喆的“喆”字)、臺灣及香港使用的繁體字、日語及朝鮮語漢字等,并未收錄在內(nèi)。

于是全國信息技術(shù)標(biāo)準(zhǔn)化技術(shù)委員會利用GB2312-1980未使用的碼點空間,收錄GB13000.1-1993的全部字符,于1995年12月1日發(fā)布了《漢字內(nèi)碼擴展規(guī)范(GBK)》(Guo-Biao Kuozhan國家標(biāo)準(zhǔn)擴展碼,是根據(jù)GB13000.1-1993(GB13000下文有詳細介紹),對GB2312-1980的擴展;英文全稱Chinese Internal Code Specification)

雖然GBK跟GB2312一樣是雙字節(jié)編碼,但GBK只要求第一個字節(jié)即高字節(jié)大于127就固定表示這是一個漢字的開始(即GBK編碼高字節(jié)的首位必須是1;0~127當(dāng)然表示的還是ASCII字符),不再像GB2312一樣要求第二個字節(jié)即低字節(jié)也必須大于127(即GBK編碼低字節(jié)首位既可以是0,也可以是1)。

正因為如此,作為同樣是雙字節(jié)編碼的GBK才可以收錄比GB2312更多的字符。

GBK字符集向后完全兼容GB2312,同時還支持GB2312-1980不支持的部分中文簡體、中文繁體、日文(不過該字符集不支持韓國文字,也是其在實際使用中與Unicode字符集相比欠缺的部分),共收錄漢字21003個、符號883個,并提供1894個造字碼位,簡、繁體字融于一體。

圖片

GBK的編碼框架(Code Scheme):其中GBK/1收錄除GB2312字符外的其他增補字符,GBK/2收錄GB2312字符,GBK/3收錄CJK字符,GBK/4收錄CJK字符和增補字符,GBK/5為非中文字符,UDC為用戶自定義字符

GB18030

中國國家質(zhì)量技術(shù)監(jiān)督局于2000年3月17日推出了GB18030-2000標(biāo)準(zhǔn),以取代GBK。GB18030-2000除保留全部GBK編碼漢字之外,在第二字節(jié)再度進行擴展,增加了大約一百個漢字及四位元組編碼空間。

GB18030《信息交換用漢字編碼字符集基本集的補充》是我國繼GB2312-1980和GB13000-1993之后最重要的漢字編碼標(biāo)準(zhǔn),是我國計算機系統(tǒng)必須遵循的基礎(chǔ)性標(biāo)準(zhǔn)之一。

2005年,GB18030編碼方案在GB18030-2000的基礎(chǔ)上又進行了擴充,于是又有了GB18030-2005《信息技術(shù)中文編碼字符集》。

如前所述,GB18030-2000是GBK的升級版本,它的主要特點是在GBK基礎(chǔ)上增加了CJK中日韓統(tǒng)一表意文字?jǐn)U充A的漢字;而GB18030-2005的主要特點是在GB18030-2000基礎(chǔ)上又增加了CJK中日韓統(tǒng)一表意文字?jǐn)U充B的漢字。

微軟也為GB18030定義了專門的代碼頁:CP54936,但是這個代碼頁實際上并沒有真正使用(在Windows 7的“控制面板”-“區(qū)域和語言”-“管理”-“非Unicode程序的語言”中沒有提供選項;在Windows cmd命令行中可通過命令chcp 54936更改,之后在cmd中可顯示中文,但卻不支持中文輸入)。

GB13000

在所有的GB編碼方案中,除了逐步擴展并保持向下兼容的GB2312、GBK、GB18030等GB系列編碼方案,還有一個與GB2312、GBK、GB18030等GB系列編碼方案不兼容的、 特殊的GB編碼方案——GB13000編碼方案 。(注意,雖然GBK的制定,主要目的就是為了收錄GB13000中的所有字符,但G BK的編碼方式與GB13000是完全不同的 。因此,習(xí)慣上所稱的GB系列編碼方案一般并不包括GB13000在內(nèi)。)

為了對世界各個國家和地區(qū)的所有字符進行統(tǒng)一編碼,以實現(xiàn)對世界上所有字符在計算機上的統(tǒng)一處理,國際標(biāo)準(zhǔn)化組織制定了新的編碼標(biāo)準(zhǔn)——ISO/IEC 10646標(biāo)準(zhǔn)(即Universal Character Set通用字符集,簡稱UCS,與統(tǒng)一聯(lián)盟制定的Unicode標(biāo)準(zhǔn)兼容,兩者的關(guān)系詳見后文)。

為了與國際標(biāo)準(zhǔn)接軌,中國于是制定了與ISO/IEC 10646.1:1993標(biāo)準(zhǔn)相對應(yīng)的中國國家標(biāo)準(zhǔn)——GB13000.1-1993 《信息技術(shù)通用多八位編碼字符集(UCS)第一部分:體系結(jié)構(gòu)與基本多文種平面》。

2010年又發(fā)布了其替代標(biāo)準(zhǔn)——GB13000-2010《信息技術(shù)通用多八位編碼字符集(UCS)》,此標(biāo)準(zhǔn)等同于國際標(biāo)準(zhǔn)ISO/IEC 10646:2003《信息技術(shù)通用多八位編碼字符集(UCS)》。

GB13000與國際標(biāo)準(zhǔn)ISO/IEC10646及Unicode標(biāo)準(zhǔn)目前在基本平面(即BMP,詳見后文)上基本保持一致。

圖片

各漢字(中文字符)編碼方案之間的關(guān)系(Big5為繁體漢字編碼方案,主要通行于港澳臺地區(qū),本文不作詳細介紹)

6.ANSI 編碼

ANSI原意是指美國國家標(biāo)準(zhǔn)協(xié)會,但是在windows系統(tǒng)中,ANSI編碼意思卻代表“本地編碼”。 。也就是說,在中國代表GBK,在臺灣代表Big5,在日本代表JIS,所以windows編程中常說的ANSI字符串,就是指本地編碼的字符串,在中國,就是一種DBCS,用1個和2個字節(jié)表示一個字符的編碼。

這也就是我們使用Notepad++進行文件編寫的時候,會默認(rèn)給我們提供ANSI的編碼格式,其實就是GBK編碼啦。

圖片

事實上并沒有ANSI編碼,ANSI是什么,是American National Standards Institute美國國家標(biāo)準(zhǔn)協(xié)會,協(xié)會,機構(gòu)而已。ANSI也有自己的ASCII標(biāo)準(zhǔn)。但是我們看到的這個ANSI并不是特指ANSI的ASCII標(biāo)準(zhǔn),這個應(yīng)該指所有的本地化編碼。

這個是微軟的鍋 。一開始只有英文操作系統(tǒng),用ANSI表示ANSI的Extend ASCII編碼。但是到了歐洲就是ISO-8859-1編碼,到中國應(yīng)該是GBK編碼,日本應(yīng)該是JIS編碼等等,為了把實際編碼的差異隱藏起來,用所謂的ANSI編碼來表示所有Windows系統(tǒng)上的地區(qū)化編碼,然后操作系統(tǒng)自己做轉(zhuǎn)換,不同的國家地區(qū),就會對應(yīng)不同的編碼規(guī)范。ANSI應(yīng)該叫地區(qū)化編碼,只出現(xiàn)在Windows系統(tǒng)中,就好像一種工廠模式,被Windows系統(tǒng)用來統(tǒng)一地區(qū)化編碼的叫法。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 計算機
    +關(guān)注

    關(guān)注

    19

    文章

    7168

    瀏覽量

    87152
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    915

    瀏覽量

    54651
  • BUG
    BUG
    +關(guān)注

    關(guān)注

    0

    文章

    155

    瀏覽量

    15628
收藏 人收藏

    評論

    相關(guān)推薦

    計算機與第三方設(shè)備通信時,常用的計算機編碼

    計算機與第三方設(shè)備通信時,常用的計算機編碼
    發(fā)表于 07-10 13:06

    計算機在教學(xué)的應(yīng)用

    ,主要學(xué)習(xí)機械的設(shè)計以及與之相關(guān)的加工技術(shù),其它與機械“無關(guān)”的課程學(xué)不學(xué)無所謂。所以,在計算機控制類課程的教學(xué)過程,大多數(shù)同學(xué)表現(xiàn)消極,僅求考核過關(guān)。有的機械制造及其自動化專業(yè)的學(xué)生甚至認(rèn)為計算機控制類...
    發(fā)表于 07-19 08:49

    什么是計算機系統(tǒng)、計算機硬件和計算機軟件?

    第一章 計算機系統(tǒng)概論1. 什么是計算機系統(tǒng)、計算機硬件和計算機軟件?硬件和軟件哪個更重要?解:P3計算機系統(tǒng):由
    發(fā)表于 07-22 09:06

    什么是計算機

    我們?nèi)祟悷o時無刻不想著,自己能夠創(chuàng)造一個世界。什么是計算機?計算社會我們?nèi)祟愐呀?jīng)步入了計算社會??v覽人類社會的計算歷史,從“結(jié)繩記事”的繩
    發(fā)表于 09-10 08:41

    計算機應(yīng)用基礎(chǔ)課程

    計算機的分類、特點及應(yīng)用領(lǐng)域 計算機的進位計數(shù)制 計算機的信息編碼標(biāo)準(zhǔn)
    發(fā)表于 05-15 09:57 ?0次下載

    用SD卡設(shè)計8086計算機的硬盤

    介紹了8086計算機的體系架構(gòu),設(shè)計了8086計算機與SD卡連接的硬件接口,并使用軟件和硬件相結(jié)合的調(diào)試方法,可快速調(diào)試驗證SD卡的功能.通過FPGA的驗證,SD卡作為8086
    發(fā)表于 11-09 16:47 ?66次下載

    計算機尋址方式解析

    計算機尋址方式解析 尋址方式 就是尋找操作數(shù)地址的方式,解決的是如何在指令中表示一個操作數(shù)的地址。 形式地址 :在指令中出現(xiàn)的操作數(shù)地址
    發(fā)表于 04-15 11:22 ?6753次閱讀

    可穿戴計算機中的語音識別、編碼和合成等技術(shù)的介紹

    本文主要介紹了可穿戴計算機的語音處理技術(shù)的語音識別、編碼和合成技術(shù),并介紹了未來的發(fā)展方向。
    發(fā)表于 09-26 18:33 ?3次下載
    可穿戴<b class='flag-5'>計算機中</b>的語音識別、<b class='flag-5'>編碼</b>和合成等技術(shù)的介紹

    量子計算機的優(yōu)點_量子計算機的應(yīng)用_量子計算機的未來應(yīng)用

    量子計算機是一類遵循量子力學(xué)規(guī)律進行高速數(shù)學(xué)和邏輯運算、存儲及處理量子信息的物理裝置。當(dāng)某個裝置處理和計算的是量子信息,運行的是量子算法時,它就是量子計算機。量子計算機的概念源于對可逆
    發(fā)表于 11-28 18:10 ?1.2w次閱讀

    從5個方面來解析計算機中的字符編碼概念

    字符編碼計算機編程不可回避的問題,不管你用 Python2 還是 Python3,亦或是 C++, Java 等,我都覺得非常有必要厘清計算機中的字符
    的頭像 發(fā)表于 01-16 09:08 ?7774次閱讀
    從5個方面來<b class='flag-5'>解析</b><b class='flag-5'>計算機中</b>的字符<b class='flag-5'>編碼</b>概念

    計算機算術(shù)運算實現(xiàn)原理

    計算機算術(shù)運算實現(xiàn)原理解。
    發(fā)表于 03-26 14:04 ?5次下載

    計算機編碼解析(上)

    你是不是工作了很多年了,一直沒搞清楚計算機中的各種編碼規(guī)則,雖然平時都會使用,但是內(nèi)部機制原理一直都是之其然而不知其所以然,開發(fā)也會經(jīng)常涉及到這塊內(nèi)容,但都沒有太多重視,這可能會讓有吃一些虧(出項目bug了),本著追本溯源的精
    的頭像 發(fā)表于 03-30 10:28 ?1092次閱讀
    <b class='flag-5'>計算機</b><b class='flag-5'>編碼</b><b class='flag-5'>全</b><b class='flag-5'>解析</b>(上)

    計算機編碼解析(下)

    你是不是工作了很多年了,一直沒搞清楚計算機中的各種編碼規(guī)則,雖然平時都會使用,但是內(nèi)部機制原理一直都是之其然而不知其所以然,開發(fā)也會經(jīng)常涉及到這塊內(nèi)容,但都沒有太多重視,這可能會讓有吃一些虧(出項目bug了),本著追本溯源的精
    的頭像 發(fā)表于 03-30 10:29 ?901次閱讀
    <b class='flag-5'>計算機</b><b class='flag-5'>編碼</b><b class='flag-5'>全</b><b class='flag-5'>解析</b>(下)

    工業(yè)計算機與普通計算機的區(qū)別

    在信息化和自動化日益發(fā)展的今天,計算機已經(jīng)成為了我們?nèi)粘I詈凸ぷ?b class='flag-5'>中不可或缺的工具。然而,在計算機領(lǐng)域中,工業(yè)計算機和普通計算機雖然都具備基
    的頭像 發(fā)表于 06-06 16:45 ?661次閱讀

    DRAM在計算機中的應(yīng)用

    DRAM(Dynamic Random Access Memory,動態(tài)隨機存取存儲器)在計算機系統(tǒng)扮演著至關(guān)重要的角色。它是一種半導(dǎo)體存儲器,用于存儲和快速訪問數(shù)據(jù),是計算機主內(nèi)存的主要組成部分。以下是對DRAM在
    的頭像 發(fā)表于 07-24 17:04 ?449次閱讀