官术网_书友最值得收藏!

1.2 計算機信息數據的表達和存儲

1.2.1 計算機和二進制數據

在1937年到1942年之間,美國衣阿華州立大學(Iowa State University)的教授John V. Atanasoff的一個研究生Clifford E.Berry曾致力于一個電子計算機的原型開發。Atanasoff-Berry計算機(Atanasoff-Berry Computer, ABC)是首先采用真空管來替代機械式開關作為處理電路的計算機,它開啟了基于二進制數字系統的計算的設計理念,如圖1-18所示。ABC通常被認為是最早的電子數字計算機。所謂二進制數字系統,是指由一連串的位(bit)來表示數據或者狀態。每個位有兩個狀態,“0”和“1”,由于電流的通斷正好表示這兩種狀態,所以從20世紀30年代開始發展的電子計算機開始采用二進制數字系統作為計算機內部的數據計算和信息表達的基礎。

圖1-18 世界上首臺具有二進制數字系統設計理念的計算機ABC

按照某歷史學家的觀點,“最初于1939年展示的ABC并不是完全意義上的計算機,正如萊特的原型不能被稱為飛機一樣,不過它確實開辟了道路”。

現代計算機采用二進制數字系統作為數據計算和信息表達的基礎,究其原因,包括:

? 技術實現簡單,計算機是由邏輯電路組成的,邏輯電路通常只有兩個狀態,開關的接通與斷開,這兩種狀態正好可以用“1”和“0”表示。

? 簡化運算規則:兩個二進制數的和、積運算組合各有三種,運算規則簡單,有利于簡化計算機內部結構,提高運算速度。

? 適合邏輯運算:邏輯代數是邏輯運算的理論依據,二進制數只有兩個數碼,正好與邏輯代數中的“真”和“假”相吻合。

? 易于進行轉換,二進制數與十進制數易于互相轉換。

? 用二進制數表示數據具有抗干擾能力強,可靠性高等優點。因為每位數據只有高低兩個狀態,當受到一定程度的干擾時,仍能可靠地分辨出它是高還是低。

深入研究表明,采用二進制數字系統的計算機的優點包括:數字裝置簡單可靠,所用元件少;只有兩個數碼0和1,因此它的每一位數都可用任何具有兩個不同穩定狀態的元件來表示;基本運算規則簡單,運算操作方便。

而二進制數也存在缺點,用二進制數表示一個數時,位數太多。因此實際使用中,一般采用十進制數將數字送入數字系統,然后由計算機轉換成二進制數進行處理和運算,運算結束后再將二進制數轉換為十進制數供人們閱讀。

1.2.2 數制轉換

為了使得計算機可以進行正常的計算和數據表達,二、十進制之間必須有辦法夠相互轉換,這種辦法稱為按權展開求和法。二進制與十進制間的相互轉換介紹如下。

(1)二進制轉十進制

方法:“按權展開求和”。轉換規律:個位上的數字的次數是0,十位上的數字的次數是1, …,依次遞增,而十分位的數字的次數是-1,百分位上數字的次數是-2, ……,依次遞減。例如,(1011.01)2= (1×23+0×22+1×21+1×2^0+0×2-1+1×2-210= (8+0+2+1+0+0.25)10=(11.25)10

注意:不是任何一個十進制小數都能轉換成有限位的二進制數。

(2)十進制轉二進制

十進制整數轉二進制數:“除以2取余,逆序排列”(除二取余法), Windows中的“計算器”程序可以驗證(見圖1-19)。

圖1-19 計算器可進行二、八、十、十六進制整數的互轉

【例1-1】 (89)10=(1011001)2

89\2……1

44\2……0

22\2……0

11\2……1

5\2…… 1

2\2…… 0

1

十進制小數轉二進制數:“乘以2取整,順序排列”(乘2取整法)。

【例1-3】 (0.625)10= (0.101)2

0.625×2=1.25 ……1

0.25×2=0.50 ……0

0.50×2=1.00 ……1

在程序設計過程中,往往需要直接使用二進制數據進行計算和輸出,但使用二進制數輸入數據,程序書寫過程中的數據會非常長,所以一般使用八進制或十六進制數來表達二進制數值。

二進制數轉換成八進制數:從小數點開始,整數部分向左、小數部分向右,每3位為一組,用1位八進制數的數字表示,不足3位的用“0”補足3位,就得到一個八進制數。

八進制數轉換成二進制數:把每個八進制數轉換成3位的二進制數,就得到一個二進制數。八進制數字與二進制數字對應關系如表1.3所示。

【例1-3】 將八進制的37.416轉換成二進制數。

即(37.416)8=(11111.10000111)2

【例1-4】 將二進制的10110.0011轉換成八進制。

即(10110.011)2=(26.14)8

(3)十六進制與二進制的轉換

二進制數轉換成十六進制數:從小數點開始,整數部分向左、小數部分向右,每4位為一組,用1位十六進制數的數字表示,不足4位的用“0”補足4位,就得到一個十六進制數。

十六進制數轉換成二進制數:把每個十六進制數轉換成4位的二進制數,就得到一個二進制數。

十六進制數字與二進制數字的對應關系如表1.4所示。

表1.3 二、八進制轉換表

表1.4 二、十六進制轉換表

【例1-5】 將十六進制數5DF.9轉換成二進制數。

5 D F . 9 0101 1101 1111.1001

即(5DF.9)16=(10111011111.1001)2

【例1-6】 將二進制數1100001.111轉換成十六進制數。

即(1100001.111)2=(61.E)16

1.2.3 數字化的含義

計算機可以通過開關位和二進制數格式存儲十進制數字。但是,二進制數字系統存在著某些限制。例如,許多早期的微型計算機系統的字長為8位,那么,這種計算機用二進制數可以存儲的最大十進制數是多少?答案是255。如果把1賦給所有的8位,可以得到二進制數11111111,等于十進制數的255。

使用二進制數字系統,8位的計算機系統不能表示大于255和小于0的數。這樣的計算機系統不會很有用處,因此計算機科學家發明了各種不同的方案來使用更多的二進制數位表示更大的數字和其他信息。因為這些設計方案普遍使用二進制數0和1,所以也被稱為二進制編碼或數字化。

數字化就是將許多復雜多變的信息轉變為可以度量的數字、數據,再以這些數字、數據建立起適當的數字化模型,把它們轉變為一系列二進制代碼,引入計算機內部,進行統一處理,這就是數字化的基本過程。

例如,數字化可將任何連續變化的輸入(如繪圖的線條或聲音信號)轉化為一串離散的數字單元,在計算機中用二進制數位表示。通常,這個過程被稱為模數(A/D)轉換。

數字化是數字計算機的基礎。若沒有數字化技術,就沒有當今的計算機,因為數字計算機的一切運算和功能都是用數字來完成的。數字、文字、圖像、語音等各種信息,實際上通過采樣過程后,都可以用由0和1組成的位串來表示,這樣數字化以后的位串或位流是各種信息最基本、最簡單的表示。因此計算機不僅可以進行計算,還可以演奏音樂、發傳真、看錄像,這是因為二進制位串可以表示各種數據和信息,進而可以描述千差萬別的現實世界。

數字化數據的計量單位有MB、GB、TB、bps或b/s等。

1 bit = b(縮寫為“b”,中文稱為“比特”)

1 byte = 8 bit=B(縮寫為“B”,中文稱為“字節”)

1 KB = 1 024 bytes;1 MB = 1 024 KB = 1 048 576 bytes

1 GB = 1 024 MB = 1 048 576 KB;1 TB = 1 024 GB = 1 048 576 MB

計算機存儲設備中一般使用字節作為計量單位。在計算機網絡通信和數據傳輸過程中,一般使用bit作為計量單位。例如,一路數字化語音需要的帶寬為64 kbps(bit per second)或64 kb/s,表示每秒傳輸64 000比特的數據。

1.2.4 文字信息編碼

在計算機處理的數據中,首先遇到的問題是如何將各種文字信息輸入到計算機中,即使是用于計算的數值,也要通過鍵盤或其他手段輸入到計算機中,轉換成二進制數據后才能計算。由于計算機發展歷史上的原因,各種文字編碼由簡到繁,由拉丁文字發展到表意文字,不斷地發展、分化、融合。計算機應用的平臺有“桌面”和“網絡”之分,不同編碼方案的應用各有側重,需要特別關注。

1.ASCII和ISO 8859-1

西文由拉丁字母、數字、標點符號及一些特殊符號所組成,通稱為字符(character)。所有字符的集合稱為字符集。字符集中,每個字符各有一個代碼(字符的二進制數表示),它們互相區別,構成了該字符集的代碼表,簡稱碼表。

字符集有多種,編碼也多種多樣,目前使用的最廣泛的計算機西文字符集及其編碼是ASCII碼,即美國標準信息交換碼(American Standard Code for Information Interchange),它已被國際標準化組織(ISO)批準為國際標準,稱為ISO 646標準。

ASCII碼是7位編碼,編碼范圍是00H~7FH(H為十六進制數的標識)。ASCII字符集包括英文字母、阿拉伯數字和標點符號等字符。

標準的ASCII碼是7位碼,用1字節(8位)表示,最高位為0,可以表示128個字符,可以使用二進制數、十進制數或十六進制數來表示。其中,00H~20H和7FH共33個控制字符,其他代碼可以用來表示數字、字母和標點符號等。數字字符0~9的ASCII碼是連續的,為30H~39H;大寫字母A~Z和小寫英文字母a~z的ASCII碼也是連續的,分別為41H~54H和61H~74H。因此,在知道一個數字或字母的編碼后,即可推算出其他數字和字母的編碼(見表1.5)。

表1.5 ASCII代碼表

例如,大寫字母A的ASCII碼為41H或65,小寫字母a的ASCII碼為61H或97。

標準的ASCII碼有94個可打印(或顯示)的字符,稱為圖形字符。這些字符有確定的結構形狀,都可以在計算機鍵盤上能找到相應的鍵,可將對應字符的二進制編碼輸入計算機,可在顯示器和打印機等輸出設備上輸出。

只支持ASCII碼的應用系統會忽略字節流中每個字節的最高位,只認為低7位是有效位。20世紀80~90年代的漢字字符編碼就是早期為了在只支持7位ASCII系統中傳輸中文而設計的編碼。因特網中的郵件協議SMTP也只支持ASCII編碼,為了傳輸中文郵件必須使用BASE64或者其他編碼方式。

由于ASCII編碼不能包含除英文以外的其他西歐語言的字母,因此ASCII編碼在西歐國家并不通用。針對這個問題,ISO在ASCII編碼的基礎上進行了擴充,制定了ISO 8859-1編碼(亦稱為ISO Latin-1)。ISO 8859-1編碼使用了一個字節的全部8位,編碼范圍是0~255。除ASCII收錄的字符外,收錄的字符還包括西歐語言、希臘語、泰語、阿拉伯語、希伯來語對應的文字符號。而歐元符號出現的比較晚,沒有被收錄在ISO-8859-1中。ISO 8859-1編碼使用00H~1FH作為控制字符,20H~7FH表示字母、數字和符號等圖形字符,A0H~FFH作為附加部分使用。因為ISO 8859-1編碼范圍使用了單字節內的所有空間,在支持ISO 8859-1的系統中傳輸和存儲其他任何編碼的字節流都不會被拋棄。換言之,把其他任何編碼的字節流當作ISO 8859-1編碼看待都沒有問題。這是個很重要的特性,MySQL數據庫默認編碼是Latin-1就是利用了這個特性。

西文字符集的編碼較常見的還有EBCDIC碼,該碼用8位二進制數(1字節)表示,共有256種不同的編碼,可表示256個字符,在某些廠商(如IBM公司)的一些產品中常使用。

2.GB 2312—1980、GBK和GB 18030

從1975年開始,我國為了研究漢字的使用頻度,進行了大規模的字頻統計工作,內容包括工業、農業、軍事、科技、政治、經濟、文學、藝術、教育、體育、醫藥衛生、天文地理、自然、化學、文字改革、考古等多方面的出版物。在數以億計的浩瀚文獻資料中,統計出實際使用的不同的漢字數為6335個,其中有3000多個漢字的累計使用頻度達到了99.9%,而其余的累計頻度不到0.1%。這說明了常用漢字與次常用漢字的數量不足7000個,為國家制定漢字庫標準提供了依據。

國家標準漢字編碼全稱是“信息交換用漢字編碼字符集(基本集)”,國家標準代號是“GB 2312—1980”,簡稱國標碼,主要用途是作為漢字信息交換碼使用。國標碼中收集了7445個漢字及符號。其中,選入了6763個漢字,一級常用漢字3755個,排列順序為拼音字典序;二級次常用漢字3008個,排列順序為偏旁序;還收集了682個圖形符號,包括數字、一般符號、拉丁字母、日本假名、希臘字母、俄文字母、拼音符號、注音字母等。在20世紀80年代,我國大陸的各種中文DOS版本、Windows 3.1/3.2版本,裝入的字庫都是國標一、二級字庫。

國標碼規定:一個漢字用2字節來表示,每個字節只用前7位,最高位均未定義。為了方便書寫,常常用4位十六進制數來表示一個漢字。例如,漢字“大”的國標碼是3473H(十六進制數)。

國標碼是一種機器內部編碼,主要用于統一不同的系統之間所用的不同編碼。通過將不同的系統使用的不同編碼統一轉換成國標碼,不同系統之間的漢字信息就可以相互交換。

隨著信息技術在各行業應用的深入,GB 2312收錄漢字數量不足的缺點顯露了出來。例如,“镕”字曾是高頻率使用字,而GB 2312沒有為它編碼,因而政府、新聞、出版、印刷等行業和部門在使用中感到十分不便。1995年,原電子部和原國家技術監督局聯合頒布了指導性技術文件《漢字內碼擴展規范》1.0版,即GBK。

CJK(CJK Unified Ideographs,中日韓統一表意文字):把分別來自中文、日文、韓文、越文的,本質、意義相同,形狀一樣或稍異的表意文字在ISO 10646及Unicode標準中賦予相同編碼。

UCS(Universal Character Set,通用字符集):國際標準ISO 10646定義,所有其他字符集標準的超集,保證與其他字符集是雙向兼容的,也就是說,如果將任何文本字符串翻譯到UCS格式,再翻譯回原編碼,不會丟失任何信息。

漢字擴展內碼規范GBK保持與GB 2312—1980的漢字編碼完全兼容,同時在字庫一級支持ISO 10646.1(GB 13000.1)的全部其他CJK漢字,且非漢字符號同時涵蓋大部分常用的BIG5中的非漢字符號。GBK字符集中的漢字字序是:GB 2312—1980的漢字仍然按照原有的一、二級字,分別按拼音、部首/筆畫排列;GB 13000.1的其他CJK漢字,按UCS代碼大小順序排列;追加的80個漢字、部首/構件,與上述兩類字庫分開,按康熙字典頁碼、字位單獨排列。

1995年之后的實踐表明,GBK作為行業規范缺乏足夠的強制力,不利于其本身的推廣。在銀行、交通、公安、戶政、出版印刷、國土資源管理等行業,對新的、大型的漢字編碼字符集標準的要求尤其迫切。

為此,原國家質量技術監督局和原信息產業部組織專家制定發布了新的編碼字符集標準,GB 18030—2000《信息技術 信息交換用漢字編碼字符集 基本集的擴充》。GB 18030的雙字節部分完全采用了GBK的內碼系統。

3.BIG5漢字編碼

BIG5漢字編碼是我國臺灣地區和香港特別行政區計算機系統中使用的漢字編碼字符集,包含了420個圖形符號和13070個漢字(不使用簡化字庫)。編碼范圍是8140H~FE7EH、81A1H~FEFEH,其中A140H~A17EH、A1A1H~A1FEH是圖形符號區,A440H~F97EH、A4A1H~F9FEH是漢字區。

4.Unicode和UTF-8

Unicode是一種在計算機上使用的字符編碼,它為每種語言中的每個字符設定了統一并且唯一的二進制編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求。它于1990年開始研發,1994年正式公布。隨著計算機工作能力的增強,Unicode也得到了普及。

一般來說,Unicode編碼系統可分為編碼方式和實現方式兩個層次。

(1)Unicode編碼方式

Unicode的編碼方式與ISO 10646通用字符集(UCS)的概念相對應。目前,用于實用的Unicode版本對應于UCS-2,使用16位的編碼空間,即每個字符占用2字節。這樣理論上最多可以表示65 536(216)個字符,基本滿足各種語言的使用。實際上,目前版本的Unicode尚未用完這16位編碼,保留了大量空間作為特殊使用或將來擴展。這樣的16位Unicode字符構成基本多文種平面(Basic Multilingual Plane, BMP)。

UCS的總體結構是一個四維編碼空間,包含00H~7FH共128組(三維),每組包含00H~FFH共256個平面(二維),每個平面包含00H~FFH共256行(一維),每行共256字位(00H~FFH),每個字位用1字節(8位二進制數)表示。因此,在UCS中,每個字符用4字節編碼,對應著每個字符在編碼空間的組號、平面號、行號和字位號,上述4個8位二進制數編碼形式稱為UCS的4個8位正則形式,記為UCS-4。UCS提供了一個極大的編碼空間,可以包括多個獨立的字符集。每個字符在這個4字節編碼空間中都有絕對的編碼位置。

UCS中的表意文字采用中、日、韓漢字統一(CJK)編碼方式,以現有各標準字符集作為源字符集,將其中的漢字按統一的認同規則進行認同、甄別后,生成涵蓋各源字集并按東亞著名的四大字典(康熙字典、大漢和字典、漢語大字典及大字源)的頁碼序位綜合排序,構成UCS中的表意文字部分(20902個字符)。已收入UCS的20902個CJK漢字,從中國的角度看,有17124個字源自GB;從中國臺灣的角度看,有17258個字源自TCA-CNS;從日本的角度看,有12157個字源自JIS;從韓國的角度看,有7476個字源自KSC。它們采用2字節編碼,現已被批準為我國國家標準(GB13000)。

UCS是一個由各種大、小字符集組成的編碼體系。它的優點是編碼空間大,能容納足夠多的各種字符集;缺點是引用不同的字符集信息量大,在信息處理效率和方便性方面還不理想。解決這個問題的方案是使用UCS的順位形式的子集(UCS-2),又稱為Unicode編碼,其編碼長度為16位。全部編碼空間都統一安排給控制字符和各種常用大、小字符集。由于它把各個主要大、小字符集的字符統一編碼于一個體系,既能滿足多字符集系統的要求,又可以把各個字符集中的字符作為等長碼處理,因而具有較高的處理效率。但是Unicode也有明顯的缺點:首先,實用中幾萬字的編碼空間仍嫌不足;其次,Unicode與ASCII碼不兼容,這使目前已有的大量數據和軟件資源難以直接繼承使用,因而成為推廣這種編碼體系的最大障礙。

(2)Unicode實現方式

Unicode的實現方式不同于編碼方式。一個字符的Unicode編碼是確定的,但是在實際傳輸過程中,由于不同系統平臺的設計不一定一致和出于節省空間的目的,對Unicode編碼的實現方式有所不同。Unicode的實現方式稱為Unicode轉換格式(Unicode Translation Format, UTF)。

例如,如果一個僅包含基本7位ASCII字符的Unicode文件,如果每個字符都使用2字節的原型Unicode編碼傳輸,其第1字節的8位始終為0。這就造成了比較大的浪費。對于這種情況,可以使用UTF-8編碼。OTF-8是一種變長編碼,它將基本7位ASCII字符仍用7位編碼表示,占用1字節(首位補0);而遇到與其他Unicode字符混合的情況,將按一定算法轉換,每個字符使用1~3字節編碼,并利用首位為0或1進行識別。

如果直接使用與Unicode編碼一致(僅限于上文提及的BMP字符)的UTF-16編碼,由于Macintosh機和PC機上對字節順序的理解是不一致的,這時同一字節流可能會被解釋為不同內容,如編碼為U+594EH的字符“奎”同編碼為U+4E59H的“乙”就可能發生混淆。于是在UTF-16編碼實現方式中使用了大尾序(big-endian)、小尾序(little-endian)的概念,以及BOM(Byte Order Mark)解決方案。

(3)UTF-8

在UNIX下使用UCS-2(或UCS-4)會導致非常嚴重的問題。用這些編碼的字符串會包含一些特殊的字符,如’\0’或’/' ,它們在文件名和其他C語言庫函數參數里都有特別的含義。另外,大多數使用ASCII文件的UNIX下的應用程序,如果不進行重大修改是無法讀取16位字符的。基于這些原因,在文件名、文本文件、環境變量等地方,UCS-2不適合直接作為Unicode的實現編碼。

RFC 2279中定義的UTF-8編碼沒有這些問題,它是在UNIX風格的操作系統下實現Unicode的常用方法。

用Unicode字符集寫的英語文本是ASCII或Latin-1寫的文本大小的2倍。UTF-8則是Unicode壓縮版本,對于大多數常用字符集(ASCII中0~127字符),它只使用單字節,而對其他常用字符(特別是朝鮮和漢語會意文字),它使用3字節(見表1.6)。如果寫的主要是英語,那么UTF-8可減少文件大小一半左右。如果主要寫漢、日、韓語,那么UTF-8會把文件大小增大50%。UTF-8就是以8位為單元對UCS進行編碼。UTF-8的一個特別的優點是它與ISO 8859-1完全兼容。這樣,為數眾多的英文文件不需任何轉換就自然符合UTF-8,這對向英文國家推廣Unicode有很大幫助。

表1.6 UTF-8的格式

UTF-8有如下特性:

① UCS字符U+0000H~U+007FH(ASCII)被編碼為字節00H~7FH(ASCII兼容),這意味著只包含7位ASCII字符的文件在ASCII和UTF-8兩種編碼方式下是一樣的。

② 所有大于U+007FH的UCS字符被編碼為一個多個字節的串,每個字節都有標記位集。因此,ASCII字節(00H~7FH)不可能作為任何其他字符的一部分。

③ 表示非ASCII字符的多字節串的第一個字節總是在C0H~FDH范圍內,并指出這個字符包含多少字節。多字節串的其余字節都在80H~BFH范圍內,這使得重新同步非常容易,并使編碼超越國界,且很少受丟失字節的影響。

④ UTF-8編碼字符理論上可以最多有6字節,而16位BMP字符最多用到3字節。

5.文字編碼的應用

各種文字的編碼方案在不同時期的計算機產品中有所體現,例如,Windows 3.2采用的是GB 2312作為中文版的內碼;Windows 95/98/ME則以GBK為基本漢字編碼,但兼容支持GB 2312;而Windows 2000/XP/Vista/7則使用的是Unicode編碼方式(其中漢字編碼就是CJK方案)。桌面操作系統的進化步伐顯然比萬維網快得多,這是由Windows操作系統的應用普遍性決定的。但是,萬維網的代碼進化則受到諸多因素的制約,首先網絡上大部分服務器的操作系統為UNIX/Linux類的產品,不能直接支持Unicode,而向UTF-8的轉換需要大量的人力的投入。在現階段,中文類網頁發展的方向在萬維網上是UTF-8,但是在相當部分的中文網站中,GB 2312和GBK仍大量存在。由于各種文字編碼的存在,出現編碼問題的幾率也大量增加。下面的案例試圖說明遇到此類問題的解決辦法。

(1)全角和半角問題

由于漢字編碼的特點,我們會遇到兩個最基本且又非常重要的概念,那就是全角與半角。

形象地說,在使用英文輸入法時,計算機屏幕上,一個英文字符(如ASCII碼中的“a”)所占的位置被稱為“半角”,而一個漢字所占的位置則等于兩個英文字符,被稱為“全角”。

在日常使用的計算機系統里,初始輸入法一般都默認為英文輸入法(輸入的文字信息為ASCII碼),這時自然會處在半角狀態下,無論是輸入字母、符號還是數字,始終都只占一個英文字符的位置。若切換到中文輸入法狀態下,則會有全角、半角兩種選擇。對中文字符來說,這兩種選擇沒有影響,始終都要占兩個英文字符的位置;但對此狀態下輸入的符號、數字以及英文字母來說,就顯得很重要。例如,“QUAN”與“QUAN”,前者輸入選擇的是半角(在計算機中以ASCII碼字母編碼存在),后者為全角(依據操作系統的不同,可以是GB 2312或Unicode編碼字符),兩者在不同的應用程序中呈現的視覺結果會有差異,但有時候會被忽視。在選擇全角后,即便是字母、符號、數字,都無一例外地要被當成漢字編碼進行處理。

如果忽視半角和全角間的切換,會遇到一些怪事,如上網時經常要輸入密碼或網址,若此時在全角狀態下進行,將因為系統無法確認(因為是完全不同的編碼)而導致失敗;在發送電子郵件的時候,把電子郵件地址寫成xxx@xxx.com,即全角“@”的形式,而不是符合規定的半角“@”形式,結果也只能是無法成功發送郵件。要強調的是,在使用命令行輸入計算機命令和參數,在程序設計環境中使用標點、符號和空格等場合,都要求使用半角(實質上是ASCII碼)進行輸入。而忽視這一點,會帶來難以預料的各種問題,如系統反饋無法執行命令或程序編譯失敗等。

所以,絕對不能忽視全角和半角的差異帶來的問題。在中文輸入狀態下,它們的情況會被顯示在輸入法提示欄中。比如,在智能ABC的提示欄中有相應按鈕供轉換,其形狀為“半月”的是半角,“圓月”的是全角,可用鼠標單擊“半月/圓月”或用快捷鍵Shift+Space進行全角和半角間的切換。

(2)解決網頁瀏覽時出現的亂碼問題

這種問題的產生,往往是網頁內容的編輯對萬維網的國際化程度認識不足引起的,有的HTML文件作者,特別是英文作者,在文件中不指定字符集。如果網頁中使用了80H~FFH之間的字符,中文Windows又按照默認的GBK或GB 2312去解釋,就會出現亂碼。這種情況可以通過Firefox瀏覽器的屬性頁面來查看(見圖1-20和圖1-21)。

圖1-20 測試網頁使用出現亂碼

圖1-21 屬性頁面說明了問題:服務器默認使用GB2312,而網頁使用了UTF-8但沒有說明

這時只要在這個HTML文件中的<head></head>標記之間加上指定字符集的語句,例如:

          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

如果原作者使用的代碼為GB 2312,即使沒有在網頁中說明代碼,因為同服務器默認代碼一致,也不會出現亂碼。

(3)解決網站內容的更新問題

在某種e-Learning環境中,系統管理員每學期需要做的事情之一是把選課學生的資料以文本文件的形式批量上傳,以便為新學期做好準備。某位系統管理員在為新近安裝的課程管理系統上傳學生名單時發現了新情況,內容中所有的ASCII字符完全正確,但是學生姓名等漢字信息則出現亂碼,在一番檢查后發現,新版課程管理系統要求使用UTF-8字符編碼。

在Windows XP操作系統附帶的“記事本”中,“另存為”對話框中可以選擇4種編碼方式,除去非Unicode編碼的ANSI外,“Unicode”、“Unicode big endian”和“UTF-8”分別對應Unicode編碼三種實現方式(見圖1-22)。用“記事本”把文本內容按照UTF-8重新保存后,再次上傳,則沒有再出現亂碼。

圖1-22 Windows中的“記事本”可以轉換文字編碼

1.2.5 圖像信息的表達

圖形(如照片和圖畫)與包含數字和文字的文檔不同。顯而易見,計算機不能用字符編碼(如ASCII)來存儲和傳送圖形,計算機必須將圖形編碼成由0和1組成的位串來存儲和傳送。在計算機系統中,有兩種非常不同的圖形編碼方法:位圖和矢量圖。這兩種編碼方法不同,不僅會影響到圖像的質量、所用存儲空間的大小,還會影響圖像傳送的時間和修改的難易程度。

(1)位圖圖像

計算機通過編碼方式確定計算機屏幕每個像素(pixel)的狀態并存儲位圖圖像,如數碼照片。位圖圖像包含的范圍很廣,既可以是簡單的黑白圖像,也可以是全真色彩的照片(見圖1-23)。最簡單的位圖圖像是單色圖像(二值圖像),所包含的顏色僅僅有黑色和白色兩種。為了理解計算機怎樣對單色圖像進行編碼,可以考慮把一個網格疊放到圖像上。網格把圖像分成許多單元,每個單元相當于計算機屏幕上的一個像素。

圖1-23 位圖與像素示意圖

對于單色圖像,每個單元(或像素)都標記為黑色或白色。如果某圖像單元對應的顏色為黑色,則在計算機中用0來表示;如果圖像單元對應的顏色為白色,則在計算機中用1來表示。網格的每一行用一串0和1來表示,計算機在存儲單色圖像時使用0來表示黑色像素,使用1來表示白色像素(見圖1-24)。對于單色圖像來說,用來表示全屏圖像的位數和屏幕中的像素數正好相等。所以,用來存儲圖像的字節數等于總位數除以8。看看圖1-24的計算,就可以知道它是怎樣工作的。分辨率為250×130的單色圖像需要32 500個二進制位。每個字節為8位,因此圖像需要4062字節(4 MB),這個存儲空間真不算大。但是,單色圖像使用的機會并不多(如OCR),作為圖像,它們看起來不太真實。

圖1-24 250×130的單色圖像的存儲空間約為4KB

灰度圖像用不同等級的灰色按比例顯示位圖圖像。如果說單色圖像如同剪紙的效果,那么,灰度圖像則與黑白照片效果相似。使用的灰度級越多,圖像看起來越逼真。為了表示如圖1-25所示的灰度圖像,計算機需要使用比單色圖像更為復雜的編碼方案。通常,計算機用256級灰度來顯示灰度圖像。

圖1-25 灰度圖像相當于黑白照片

對于256級灰度圖像,需要使用多少二進制位呢?在256級灰度圖像中,每個像素可以是白色、黑色或灰度中254級中的任何一個——共256種可能性。傳送256個信息單元需要多少位呢?答案是8,28=256。這樣,256級灰度圖像的每個像素需要8位(1字節)。一幅分辨率為490×460的256級灰度圖像需要225 400字節。

256色圖像中,每個像素需要8位(1字節)。一個256色的全屏圖像(分辨率為1024×768)需要786 432字節,是16色圖像的存儲空間的2倍,與256級灰度圖像一樣。照片質量的圖像可以顯示多達1670萬種顏色,稱為24位或真彩色圖像。為了表示1670萬色圖像,每個像素需要24位(3字節)來表示。

圖像文件可能相當龐大,這樣大的文件需要很長的傳輸和下載時間。如果在家里從網絡下載一個640×480大小的256色位圖,要花費半分鐘或更長時間。而下載16色同樣大小的圖像文件則可以減少一半的時間。

掃描的照片和其他常見圖像通常被保存為位圖圖像。擴展名為.bmp、.pcx、.tif、jpg和.gif的文件,通常意味著文件中包含位圖圖像。文件擴展名通常作為文件格式的名稱,如擴展名為 .gif的文件通常被稱為“GIF格式文件”。

因為位圖文件被編碼為一系列的位串來表示像素,因此可以通過修改單個像素來修改或者編輯此類圖像。可以使用位圖圖像軟件(也稱為“照片編輯軟件”或“畫圖軟件”)來修改位圖文件。圖像編輯軟件能夠將圖片的局部進行放大,以便更加方便地對單個像素進行修改。因為按像素修改大幅圖像是很乏味的過程,位圖圖像軟件提供了一些附加的操作工具,如剪切、復制、粘貼和填充圖片區域的顏色等。

位圖圖像軟件具有修改照片級質量圖像的能力,如可以潤飾和修復老照片,潤色新照片。一些常見的位圖處理軟件,如“光影魔術手”,可以批量處理和修改位圖文件或數碼照片(見圖1-26)。

圖1-26 可以處理照片的“光影魔術手”軟件

(2)矢量圖像

矢量圖像由一系列可重構圖像的指令構成。在創建矢量圖像的時候,可以用不同的顏色來繪制線條和圖形,計算機再將這一連串線條和圖形轉換為能重構圖像的指令。計算機只存儲這些指令,而不是真正的圖像。矢量圖像看起來沒有位圖圖像逼真(見圖1-27)。

圖1-27 矢量圖的常見效果

但是,矢量圖像有幾個優點,這使得它們非常適合用作繪制示意圖。

① 可以把矢量圖像的一部分當作一個單獨的對象,單獨加以拉伸、縮小、變形、上色、移動和刪除,從而使得它在工程、創意和設計領域具有廣泛的用途。例如,假設某矢量圖像中包含一輛銀色的汽車,你可以方便地把它移到不同的位置、放大或改變它的顏色。當縮小或者放大矢量圖像時,對象也會按比例變化,以保證邊緣平滑。位圖中的圓形在放大之后會出現齒痕,而矢量圖像中的圓形在任何尺寸下看起來都是平滑的。

② 同時,矢量圖的存儲空間比位圖小得多。其存儲空間的需求與圖像的復雜性有關,每條指令都需要存儲空間,所以圖像中的線條、圖形、填充模式越多,所需要的存儲空間越大。矢量圖像文件通常包含文件擴展名,如.wmf、.dxf、.mgx、.eps、.cgm。矢量圖像軟件是指“繪畫軟件”,而且在通常情況下,是與位圖圖像軟件不同的軟件包。流行的矢量圖像軟件包有Microsoft Visio、Corel DRAW和億圖等。

使用矢量圖像軟件來畫一個圖像時,可以使用畫圖工具來創建圖形或物體,也可以通過選擇不同的幾何物體,連接不同的點,而創建不同的應用圖形。例如,可以使用填充圓工具來畫一個圓,并填充以顏色,通過選擇和改變對象的位置、大小和顏色,可以將創建的多個對象組合成一個圖像,加注必要的說明,如尺寸大小、對象的用途、圖形的名稱等。圖1-28顯示了怎樣使用畫圖工具來創建一個矢量圖像。

圖1-28 億圖繪圖軟件可以繪制矢量圖像

1.2.6 聲音信息的表達

在計算機應用中,聲音主要分為3種:

① 背景音樂,其主要作用是烘托氣氛,引發目標受眾的情結和情感,增強作品的感染力。針對不同的主題,應該配以不同風格、情調、節奏的音樂,使背景音樂和主題風格協調、一致。

② 旁白解說,其主要作用是強化畫面信息,對畫面信息進行補充說明。

③ 效果音樂。鈴聲、笛聲、鳥叫等聲音稱為效果音樂,也稱為音效,其主要作用是吸引目標受眾的注意。

計算機中廣泛應用的數字化聲音文件有兩類:一類是采集各種聲音的機械振動得到的數字文件(也稱為波形文件),其中包括音樂、語音及自然界的效果音等;另一類是專門用于記錄數字化樂聲的MIDI格式的文件。

常見的聲音處理方法有:

? 聲音信息的數字化,如將語言或磁帶上的聲音錄制成音頻文件。

? 對已有的數字化音頻信息進行編輯,如截取音頻文件片斷,將WAV格式的文件轉換為MP3格式的文件(這些內容將在第6章中描述)。

1.波形音頻

波形音頻是聲音的數字形式表示。音樂、語音和自然界的各種聲音都可以以波形形式進行記錄。對于聲音的數字記錄來說,會周期性地對聲音波形進行采樣,并以數字數據的形式進行存儲。圖1-29顯示了計算機怎樣用數字方式對聲音波形進行采樣。

圖1-29 計算機對音波信息進行數字化采樣

音樂CD是按照樣本速率44.1 kHz進行錄音的,這意味著每秒進行44100次的聲音采樣。16位用于每個樣本,為獲得立體聲效果,需要2倍的16位樣本,因此每個樣本需要32位的存儲空間。當以44.1 kHz對立體聲CD質量音樂進行采樣時,一輯典型的音樂專輯CD(45分鐘)需要454 MB的存儲空間。

為了節省存儲空間,不需要高品質音效的應用程序可以使用較低的采樣速率。如果設定語音采樣速率為8 kHz,即每秒采樣8000次、單聲道。這樣,聲音的質量比較低,而文件大小只有以44.1 kHz/16位/雙聲道錄制的相似聲音文件的1/25(見圖1-30)。

圖1-30 通過“聲音選定”調整采樣速率

存儲在計算機上的波形文件的擴展名有.wav、.mod、.au和.voc等。可以使用Windows系統自帶的“錄音機”和“媒體播放器”程序來記錄和播放波形文件,這些音樂文件播放通常需要通過聲卡和揚聲器配合。

2.MIDI音樂

MIDI(Musical Instrument Digital Interface,樂器數字接口)是電子樂器用來交流、傳輸信號的一種協議,相當于一個指令系統,其指令里包含各種器樂數據信息,這些信息通過MIDI線路發送給音源,音源按照指令發出聲音。計算機中的MIDI文件包含MIDI樂器和MIDI聲卡,用來重構聲音的指令序列。盡管MIDI文件能存儲和重構樂器聲音,但不能存儲和重構語音和聲樂。MIDI文件比波形文件更為緊湊。3分鐘的MIDI音樂僅僅需要10 KB的存儲空間,而3分鐘的波形音樂則需要15 MB的存儲空間。

MIDI對音樂的影響很廣,其中最重要的影響之一是改變了作曲的方式。MIDI是由樂器商建立的通信標準,它規定計算機、合成器(synthesizer)與其他電子設備之間交換信息和控制信號的方法。憑借各種MIDI軟件工具、個人計算機和MIDI硬件,作曲家可以制作出復雜的、具有專業水平的樂曲。

MIDI是一個音樂符號系統,允許計算機和音樂合成器進行通信。計算機把音樂編碼成一個序列,并以 .mid、.cmf或.rol文件擴展名進行存儲。MIDI作曲與編寫樂譜十分類似。MIDI譜曲操作包含音符的定調、開始音符、演奏音符的樂器、音符的音量和音符的時間等。

為了播放MIDI文件,可以使用Microsoft的媒體播放器;而MIDI的編曲可以采用MIDI樂器和設備,包括音樂工作站、合成器、電子琴、電鋼琴、電子弦樂、電子管樂、電子打擊樂、音源器、效果器、采樣器和電子手風琴等。一些專門的軟件如MIDI Tracker等,也可以用來編制MIDI音樂,如圖1-31所示。

圖1-31 電子合成器作曲軟件MIDI Tracker的工作界面

主站蜘蛛池模板: 临夏市| 芜湖市| 河曲县| 葫芦岛市| 华宁县| 惠来县| 共和县| 福泉市| 滦南县| 三都| 安远县| 韩城市| 古丈县| 旬阳县| 江津市| 栾川县| 双城市| 普安县| 武平县| 澳门| 淄博市| 三明市| 定边县| 琼中| 凌源市| 吐鲁番市| 鹰潭市| 德惠市| 涟源市| 黔西县| 金门县| 乳山市| 于都县| 阿拉善左旗| 义乌市| 东平县| 乌拉特后旗| 新兴县| 江津市| 深水埗区| 基隆市|