資訊傳遞 編碼和計算機表示(二)

2021-05-22 05:37:55 字數 2094 閱讀 6205

數字計算機的世界就是0和1,所以一切要通過計算機進行計算和表達的資訊都必須編碼成0、1串。那麼計算機中如何表示阿拉伯數字,英文本母、希臘字母、拉丁字母、中文字元、數學符號等呢。下面講解計算機中如何對這些進行編碼,以及現實中編碼出現的歷史。

按照先後順序,計算機字元編碼先後出現的是 ascii、extended ascii、mbcs編碼、unicode編碼。

一、standard ascii(標準ascii)

ascii (american standard code for information interchange),是美國標準資訊交換碼,由美國國家標準局(ansi)制定的,它已被國際標準化組織(iso)定為國際標準,稱為iso 646標準。ascii碼適用於所有拉丁文本,它用7位二進位制數進行編碼(其最高位(bit7)被用做奇偶校驗位),範圍是(0x00-0x7f),可以表示128種不同的符號。 其中包括了阿拉伯數字0-9、英文本母a-z和大些的a-z、數**算符號、括號、標點、控制字元等。 這些已經滿足了最初的需求,下面是ascii碼表

注:這128個code中(從0開始編號,0-127),有些是可視的【0x20(space)-0x7e(~)】,有些是非可視的【0x00-0x1f和0x7f(del)】。非可視字元基本用於控制字元,例如0x07,如果你輸出到標準輸出,那麼計算機會發出「嘀」的響聲;0x0d表示回車,0x0a表示換行,0x09表示tab,等等。

二、extended ascii(擴充套件ascii)

乙個位元組(0x00-0xff)可以表示256種含義,標準ascii使用了低128種。 為了能表示更多字元,各廠商制定了很多種ascii碼的擴充套件規範,於是形成了extended ascii,這不是標準ascii的一部分。例如ibm定義的擴充套件編碼,裡面定義了很多的線條,主要用於進行文字形式的格式化顯示。裡面還包括了希臘字母和數學符號,以及帶重音號的拉丁字母。該編碼在字元終端下被廣泛使用。

該ibm擴充套件字符集被燒進無數顯示卡和印表機的rom中,並被許多應用程式用於修飾其文字模式的顯示方式。不過,該字符集並沒有為所有使用拉丁字母表的西歐語言提供足夠多的帶重音字元,而且也不適用於windows。windows不需要圖形字元,因為它有乙個完全圖形化的系統。

在windows 1.0(2023年11月發行)中,microsoft沒有完全放棄ibm擴充套件字符集,但它已退居第二重要位置。因為遵循了ansi草案和iso

標準,純windows字符集被稱作「ansi字符集」。 ansi草案和iso標準最終成為ansi/iso 8859-1-1987,即「american national standard for information processing-8-bit single-byte coded graphic character sets-part 1: latin alphabet no 1」,通常也簡寫為「latin 1」。

這是在圖形介面中最廣泛使用的擴充套件,其中包含歐洲各國語言中最常用的非英文本母,但畢竟只有128個字元,某些語言中的某些字母沒有包含。如下表所示(編號為128~159的是一些控制字元,表中沒有列出):

小結:1、從上面的講述看來,很明顯0x00-0x7f的位元組表示了乙個確定的符號(根據ascii碼表),但是0x80-0xff中某個數字對應的位元組,在ibm的擴充套件ascii碼表和latin-1中,就有不同的含義。 例如,0xd7在ibm擴充套件碼中顯示的是「兩豎一橫」的符號,但是在latin-1(iso 8859-1)中卻是數學符號「×」。

q:那麼計算機怎樣對待這樣的重碼情況呢,也就是將0xd7看成是「兩豎一橫」還是「×」?

a:答案是都可以。為了解決這個問題,需要引入碼表(codepage)的概念。ms-dos 3.3(2023年4月發行)向ibm pc使用者引進了程式碼頁(code page)的概念,windows也使用此概念。程式碼頁定義了字元的對映**。最初的ibm字符集被稱作程式碼頁437,或者「ms-dos latin us)。「ms-dos latin 1」的是程式碼頁850,它用附加的帶重音字母代替了一些線形字元。其他程式碼頁被其他語言定義。最低的128個**總是相同的;較高的128個**取決於定義程式碼頁的語言。

2、亂碼的原因

q:為什麼亂碼

a:顯示的亂碼就是因為實際含義和顯示的不一致。例如根據程式碼頁437(ibm extend ascii)進行編碼,但是顯示的時候用程式碼頁850(latin-1)進行翻譯,就出現問題了。

未完待續。。。

計算機中資訊的表示

每乙個c語言程式的生命週期都是由乙個以.c為字尾的原始檔開始的,每乙個這樣的原始檔實際上都是有0和1組成的位 bit 序列,8個位被組織成一組,稱為位元組,每個位元組表示程式中的某個相應文字字元。大部分的現代系統都使用ascii標準來表示文字字元 即ascii碼表 這種方式就是用乙個唯一的單位元組大...

計算機編碼 編碼

原碼 a.規則 最高位為符號位,0為正數,1為負數,剩餘位表示資料 b.例 95 原 0101 1111 原 77 原 11001101 原 c.特點 區分正負零 缺陷 0 原 0000 0000 0 原 1000 0000 原碼可能出錯 1 原 1 原 1000 0010 原 2 d d.範圍 8...

計算機編碼

來自 阮一峰 一下對自己有用的精簡部分 1.ascii碼 在計算機內部,所有的資訊最終都表示為乙個二進位制的字串。每乙個二進位制位有0和1兩種狀態,因此八個二進位制位就可以組合出256種狀態,這被稱為乙個位元組 byte 也就是說,乙個位元組一共可以用來表示256種不同的狀態,每乙個狀態對應乙個符號...