吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

計算機編碼全解析(中)

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

4.MBCS、DBCS

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

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

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

5.GB2312、GBK、

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

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

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

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

比如, 當多字節字符與原先的ASCII字符混用時

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

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

GB2312

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

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

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

圖片

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

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

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

全角、半角

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

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

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

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

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

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

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

GBK

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

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

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

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

正因為如此,作為同樣是雙字節編碼的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

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

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

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

如前所述,GB18030-2000是GBK的升級版本,它的主要特點是在GBK基礎上增加了CJK中日韓統一表意文字擴充A的漢字;而GB18030-2005的主要特點是在GB18030-2000基礎上又增加了CJK中日韓統一表意文字擴充B的漢字。

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

GB13000

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

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

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

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

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

圖片

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

6.ANSI 編碼

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

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

圖片

事實上并沒有ANSI編碼,ANSI是什么,是American National Standards Institute美國國家標準協會,協會,機構而已。ANSI也有自己的ASCII標準。但是我們看到的這個ANSI并不是特指ANSI的ASCII標準,這個應該指所有的本地化編碼。

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計算機
    +關注

    關注

    19

    文章

    7536

    瀏覽量

    88642
  • 編碼
    +關注

    關注

    6

    文章

    957

    瀏覽量

    54951
  • BUG
    BUG
    +關注

    關注

    0

    文章

    155

    瀏覽量

    15723
收藏 人收藏

    評論

    相關推薦

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

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

    計算機在教學的應用

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

    什么是計算機系統、計算機硬件和計算機軟件?

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

    什么是計算機

    我們人類無時無刻不想著,自己能夠創造一個世界。什么是計算機計算社會我們人類已經步入了計算社會??v覽人類社會的計算歷史,從“結繩記事”的繩
    發表于 09-10 08:41

    計算機應用基礎課程

    計算機的分類、特點及應用領域 計算機的進位計數制 計算機的信息編碼標準
    發表于 05-15 09:57 ?0次下載

    用SD卡設計8086計算機的硬盤

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

    計算機尋址方式解析

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

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

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

    量子計算機的優點_量子計算機的應用_量子計算機的未來應用

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

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

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

    計算機算術運算實現原理

    計算機算術運算實現原理解。
    發表于 03-26 14:04 ?5次下載

    計算機編碼解析(上)

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

    計算機編碼解析(下)

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

    工業計算機與普通計算機的區別

    在信息化和自動化日益發展的今天,計算機已經成為了我們日常生活和工作不可或缺的工具。然而,在計算機領域中,工業計算機和普通計算機雖然都具備基
    的頭像 發表于 06-06 16:45 ?1619次閱讀

    DRAM在計算機中的應用

    DRAM(Dynamic Random Access Memory,動態隨機存取存儲器)在計算機系統扮演著至關重要的角色。它是一種半導體存儲器,用于存儲和快速訪問數據,是計算機主內存的主要組成部分。以下是對DRAM在
    的頭像 發表于 07-24 17:04 ?1557次閱讀
    百家乐扫瞄光纤洗牌机扑克洗牌机扑克洗牌机| 百家乐怎么玩会| 优博百家乐官网现金网| 大发888存款方式| 百家乐实时赌博| 百家乐真人游戏开户| 百家乐官网娱乐网代理佣金| 百家乐官网赢家公式| 乌恰县| 德州扑克策略| 威尼斯人娱乐城网| 太阳城百家乐赌场| 保单百家乐游戏机| 黄金城百家乐官网苹果版| 现金百家乐官网技巧| 百家乐官网关键词| 百家乐官网乐城皇冠| 达拉特旗| 孟津县| 美国百家乐官网怎么玩| 百家乐官网娱乐城代理| 大发888官方 论坛| 大发888娱乐城下栽| 网上百家乐试玩网址| 百家乐手机壳| 大发888娱乐城亚付宝| 大发888 备用6222| 博彩| 嘉禾县| 百家乐官网游戏机压法| 玩百家乐官网678娱乐城| 百家乐官网单跳| 大发888赌场| 明珠线上娱乐| 林西县| 真人百家乐官网园| 试玩百家乐官网游戏机| 嘉禾百家乐官网的玩法技巧和规则| 做生意房子选哪个方位| 澳门赌百家乐打法| 卢克索百家乐的玩法技巧和规则|