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

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

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

計算機編碼全解析(上)

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

前言

你是不是工作了很多年了,一直沒搞清楚計算機中的各種編碼規(guī)則,雖然平時都會使用,但是內(nèi)部機制原理一直都是之其然而不知其所以然,開發(fā)中也會經(jīng)常涉及到這塊內(nèi)容,但都沒有太多重視,這可能會讓有吃一些虧(出項目bug了),本著追本溯源的精神或是為了讓自己在少出血bug,小余今天就來聊聊這塊內(nèi)容。

目錄

1.字符集與字符編碼

首先要明確兩概念, 字符集 (charset)和 字符編碼 (encoding)。

字符集

字符集顧名思義: 很多字符的集合 。這些字符組成一套字符系統(tǒng),用來表達我們生活中各種含義,

比如0~9以及各種加減法等符號的集合,可以表示生活中的“數(shù)字集合”,不然1+1是什么計算機可不知道? 26個大小寫英文字母加上標點符號就組成了“英文字符集“,這些字符集在英美人看來就組成了一套符號系統(tǒng),看到”I Love you“就知道什么意思了。 再比如我們新華字典中的所有漢字加上標點符號就組成了“中文字符集”,這個字符集就組成了中文文字系統(tǒng)。看到“我愛你”也就知道什么意思了,可以對于不懂中文的老外來,因為沒有中文字符集,看到“我愛你”可就一臉懵逼了。

字符編碼

字符編碼 :言外之意就是 對字符進行編碼 ,那為什么要對字符編碼,其實字符編碼最終目的就是為了存儲或者傳輸。我們的計算機最早是用來提供算術功能的,和算盤功能類似,但是后來發(fā)現(xiàn)計算機可以做很多事情。 其中就包括存儲機制,如何存儲呢?假設“LOVE”這個單詞,我們使用數(shù)字1代表L,數(shù)字2代表O,數(shù)字3代表V,數(shù)字4代表E,將1234存儲在某個區(qū)域,這樣就可以知道這4個數(shù)字代表了“LOVE”,當然實際LOVE有自己的字符表示,這里使用1234作為例講解。

字符編碼的四個步驟

要在計算機中建立一個“字符編碼模型”,需要四個步驟:

  • 1.要有一個 字符庫 ,確定這些字符庫足夠表意。比如ASCII字符集,已經(jīng)足夠表示英文系統(tǒng),但是不能表達中文,于是有了GB2312字符集。
    1. 第一層編碼 :給每個字符選個數(shù)字(Code Point),比如ASCII碼中,用65表示“A”,97表示“a”。
    1. 第二層編碼 :確定表示字符的二進制位數(shù)(8位,16位,32位)。ASCII碼使用7位來表示,因為當時制定者覺得7位以及夠用了,DBCS(雙字節(jié)字符集)使用了16位。
  • 4.第三層編碼: 確定字符的二進制存儲方式(大端還是小端)。比如X86機器使用小端。

一個字符一般只有一種編碼格式,當字符集中的字符不夠用時,會增加一些新的字符,使用新的字符編碼格式,形成新的字符集。所以 有時候字符集和字符編碼的概念是很模糊的,并不嚴格區(qū)分 。比如ASCII碼既可以成為一段“字符集”,也可以稱為一種“編碼格式”。

也有一些字符集有多種編碼格式:如Unicode,其中UTF-8和UTF-16等都是其編碼格式,這個后面是詳細講解。

2.常用計算機編碼

1.ASCII碼

ASCII碼全稱“American Standard Code for Information Interchange”, 美國標準信息交互碼 ,由美國標準委員會(American Standards Association,簡稱ASA)制定,后來該協(xié)會改組為“美國國家標準學會”(American National Standard Institute , 簡稱ANSI ),所以很多資料上說ASCII碼是由ANSI指定的。

ASCII碼是從電報碼發(fā)展過來的,最早使用在7-bits電傳打印機上。1960年,ASA將ASCII標準化,于1963年發(fā)布第一版,1967年再發(fā)布一次大的版本,這個標準版本,也是一個7-bit碼,包含33個非打印字符(現(xiàn)在許多已經(jīng)廢棄了),95個打印字符(包含空格符),編碼范圍為0~127。

圖片

然而ASCII碼只是美國的標準,對于其他國家,如中文,日文,韓文等大多使用的是象形文字,127個字符遠遠無法表達中國的漢字文化,于是各國在ASCII的基礎上制定了自己的字符集,但是 本質(zhì)上都兼容ASCII ,如中國大陸的GK2312,臺灣省的(Big5)小日子的JIS等編碼規(guī)范。

2.EASCII

其實標準的ASCII就是7-bit的編碼(8字節(jié),但是最高位沒有編碼),后來使用過程中發(fā)現(xiàn)127個字符有點不夠用,于是將ASCII進行了擴展,叫做EASCII或者high-ASCII,8位的,能表示256個字符。

由于不同的應用場景,有不同的編碼,有IBM的Extend ASCII和ANSI的Extend ASCII。 去wikipedia上會發(fā)現(xiàn)有好多種ASCII的標準,大類就是IBM和ANSI(Windows的,微軟很強勢,ANSI的東西感覺就是給他們家用的)兩種,其實都是為了給自家系統(tǒng)用的,隨著IBM操作系統(tǒng)的墜落,IBM的擴展ASCII也根本上淡出視野。

擴展的ASCII的產(chǎn)生

搭載Windows系統(tǒng)的計算機進入歐洲之后,發(fā)現(xiàn)標準的ASCII并不能滿足歐洲這些拉丁語族國家的語言表意,決定對其進行擴展。同為印歐語系,發(fā)現(xiàn)擴展起來也沒那么難,總共256個值就包括所有了。只需要將原來的7-bit擴展為8-bit,將原來的標準ASCII保留,第一位使用0來表示。將擴展的字符第一位使用1來表示

擴展ASCII的組成

具體來講,擴展后的ASCII碼表可以看成 由三部分組成

  • 第一部分 :由00H到1FH共32個,一般用來通訊或作為控制之用。有些可以顯示在屏幕上,有些則不能顯示,但能看到其效果(如換行、退格)
  • 第二部分 :是由20H到7FH共96個,這95個字符是用來表示阿拉伯數(shù)字、英文字母大小寫和下劃線、括號等符號,都可以顯示在屏幕上.
  • 第三部分 :由80H到0FFH共128個字符,一般稱為"擴充字符",這128個擴充字符是由IBM制定的,并非標準的ASCII碼.這些字符是用來表示框線、音標和其它歐洲非英語系的字母。

圖片

3.ISO-8859

由于每個國家以及公司對編碼的各自定制化,導致 同一個字符在不同電腦之間由于編碼的不一致,顯示的結(jié)果也不一樣,現(xiàn)象就是亂碼 。 那為了解決這個問題,ISO組織統(tǒng)一了一套標準的字符集。

與ASCII、EASCII字符編碼方案只包括單個獨立的字符集不同,ISO/IEC 8859字符編碼方案包括了一組字符集, 或者說ISO/IEC 8859相當于是一組字符集的總稱,其內(nèi)共包含了15個字符集, 即ISO/IEC 8859-n,n=1、2、3…15、16,其中12未定義,所以實際上共15個。

這15個字符集,大致上包括了歐洲各國所使用到的字符(甚至還包括一些外來語字符),而且每一個字符集的補充擴展部分(即除了兼容ASCII字符之外的部分),都只實際使用了0xA00xFF(十進制為160255)這96個編碼,而0x800x9F(十進制為128159)這32個編碼并未實際定義字符。

其中,目前使用得最為普遍的是ISO/IEC 8859-1字符集,收錄了西歐常用字符(包括德法兩國的字母)。

ISO/IEC 8859-1往往簡稱為ISO 8859-1,而且還有一個稱之為Latin-1(也寫作Latin1)的別名,即:ISO/IEC 8859-1 = ISO 8859-1 = Latin-1 = Latin1。

圖片

從ISO 8859-1到ISO 8859-16各自所收錄的字符分別如下:

ISO/IEC 8859-1 (Latin-1) - 西歐語言
ISO/IEC 8859-2 (Latin-2) - 中歐語言
ISO/IEC 8859-3 (Latin-3) - 南歐語言。世界語也可用此字符集顯示。
ISO/IEC 8859-4 (Latin-4) - 北歐語言
ISO/IEC 8859-5 (Cyrillic) - 斯拉夫語言
ISO/IEC 8859-6 (Arabic) - 阿拉伯語
ISO/IEC 8859-7 (Greek) - 希臘語
ISO/IEC 8859-8 (Hebrew) - 希伯來語(視覺順序)
ISO 8859-8-I - 希伯來語(邏輯順序)
ISO/IEC 8859-9(Latin-5 或 Turkish)- 它把Latin-1的冰島語字母換走,加入土耳其語字母。
ISO/IEC 8859-10(Latin-6 或 Nordic)- 北日耳曼語支,用來代替Latin-4ISO/IEC 8859-11 (Thai) - 泰語,從泰國的 TIS620 標準字集演化而來。
ISO/IEC 8859-13(Latin-7 或 Baltic Rim)- 波羅的語族
ISO/IEC 8859-14(Latin-8 或 Celtic)- 凱爾特語族
ISO/IEC 8859-15 (Latin-9) - 西歐語言,加入Latin-1欠缺的芬蘭語字母和大寫法語重音字母,以及歐元(€)符號。
ISO/IEC 8859-16 (Latin-10) - 東南歐語言。主要供羅馬尼亞語使用,并加入歐元符號。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 計算機
    +關注

    關注

    19

    文章

    7305

    瀏覽量

    87562
  • 編碼
    +關注

    關注

    6

    文章

    921

    瀏覽量

    54716
  • BUG
    BUG
    +關注

    關注

    0

    文章

    155

    瀏覽量

    15635
收藏 人收藏

    評論

    相關推薦

    計算機與網(wǎng)絡技術基礎

    計算機與網(wǎng)絡技術基礎了解計算機網(wǎng)絡的形成與發(fā)展過程  掌握計算機網(wǎng)絡的定義、分類、功能和典型應用  掌握計算機網(wǎng)絡的組成結(jié)構(gòu)  了解
    發(fā)表于 12-07 13:36

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

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

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

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

    計算機運算速度是指什么

    計算機運算速度是指什么?按傳輸介質(zhì)分類,計算機網(wǎng)絡可分為哪幾種?使用16位二進制編碼表示聲音與使用8位二進制編碼表示聲音的效果有何不同?
    發(fā)表于 10-19 09:05

    什么是程序?什么是計算機

    什么是程序?程序(Program)流程、議程、行程、…為了完成某項任務,解決某個問題需要執(zhí)行的一系列步驟計算機程序為了完成某項任務,解決某個問題由計算機執(zhí)行的一系列指令(步驟)什么是計算機?
    發(fā)表于 11-23 09:02

    計算機應用基礎教案

    介紹什么是計算機計算機的特點,計算機的應用與發(fā)展:什么是計算機計算機的發(fā)展;計算機的分類;
    發(fā)表于 09-25 12:45 ?0次下載

    計算機應用基礎課程

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

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

    介紹了8086計算機的體系架構(gòu),設計了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 ?6766次閱讀

    2002()《計算機原理》試卷

    2002()《計算機原理》試卷
    發(fā)表于 04-15 13:52 ?556次閱讀

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

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

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

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

    比量子計算機更容易構(gòu)建的新的計算機制造方法 用液晶構(gòu)建計算機

    兩位科學家在最新一期《科學進展》雜志撰文提出了一種新的計算機制造方法:用液晶構(gòu)建計算機,這種計算機將使用分子的朝向來存儲數(shù)據(jù)。在液晶計算機
    的頭像 發(fā)表于 08-24 19:58 ?1247次閱讀

    計算機編碼解析(中)

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