- 計算機系統(tǒng)解密:從理解計算機到編寫高效代碼
- (美)喬納森·E.斯坦哈特
- 1091字
- 2021-09-27 16:56:59
1.11 用字符表示數(shù)字
UTF-8用數(shù)字來表示由代表字符的位組成的數(shù)字。但是我們還沒有完成!現(xiàn)在,我們要用字符來表示其中的一些數(shù)字。在計算機與計算機互相通信的早期,人們希望在計算機之間發(fā)送的不僅僅是文字,還希望發(fā)送二進制數(shù)據(jù)。但在計算機間發(fā)送二進制數(shù)據(jù)并不簡單,因為許多ASCII值都是為控制字符保留的,而且不同系統(tǒng)之間的處理方式不一致。此外,有些系統(tǒng)只支持7位字符的傳輸。
1.11.1 可打印字符引用編碼
可打印字符引用編碼也稱為QP編碼,是一種允許將8位數(shù)據(jù)通過只支持7位數(shù)據(jù)的路徑進行通信的編碼,常用于電子郵件附件。這種編碼允許任何8位的字節(jié)值由3個字符表示:字符“=”后跟一對十六進制數(shù)字(1個數(shù)字對應1個半字節(jié))。當然,這樣做的過程中,“=”具有特殊含義,因此必須用“=3D”代表它,它的值見表1-11。
可打印字符引用編碼有一些額外的規(guī)則。如果制表符和空格字符出現(xiàn)在行尾,必須分別用“=09”和“=20”表示。編碼后數(shù)據(jù)行的長度不能超過76個字符。在行末的“=”是一個軟換行符,當接收方解碼數(shù)據(jù)時會刪除。
1.11.2 Base64編碼
雖然可打印字符引用編碼可以使用,但因為需要三個字符來代表一個字節(jié),它的效率并不高。Base64編碼更有效率,而效率在計算機之間的通信速度比現(xiàn)在慢得多的時候非常重要。Base64編碼將3字節(jié)的數(shù)據(jù)打包分配給4個字符。這3字節(jié)的24位數(shù)據(jù)被分割成4個6位的塊,每個塊分配一個打印字符,如表1-13所示。
表1-13 Base64字符編碼

圖1-17展示了如何將字節(jié)0、1、2編碼為AAEC。

圖1-17 Base64編碼
圖1-17所示的編碼以3字節(jié)為一組,將其轉(zhuǎn)換為4個字符。但不能保證數(shù)據(jù)的長度是3字節(jié)的倍數(shù),因而可以通過填充字符來確保數(shù)據(jù)的長度是3字節(jié)的倍數(shù);如果末尾只有2字節(jié),則會在末尾添加一個“=”,如果末尾只有1字節(jié),則會在末尾添加“==”。
這種編碼也常用于電子郵件附件。
1.11.3 URL編碼
在上文中可以看到,可打印字符引用編碼賦予了“=”字符特殊的權力,編碼中也包含了表示“=”但沒有特殊的功能的機制。網(wǎng)頁URL使用了幾乎同一種模式。
如果你曾經(jīng)檢查過網(wǎng)頁的URL,可能已經(jīng)注意到像%26和%2F這樣的字符序列。這些字符之所以存在是因為它們在URL的上下文中具有特殊含義。但有時我們需要用這些字符作為字面值,換句話說,就是不含特殊的意義。
上一節(jié)提到,字符被表示為一個8位數(shù)據(jù)塊的序列。每個數(shù)據(jù)塊可以用兩個十六進制的字符來表示,如圖1-16所示。URL編碼,也稱為百分制編碼,用%后面跟著其十六進制表示的形式替換字符。
例如,正斜線字符(/)在URL中有特殊的含義。它的ASCII值為47,也就是十六進制中的2F。如果我們需要使用URL中的“/”,而不想觸發(fā)其特殊含義,可以用%2F代替“/”。(因為我們剛剛給%字符賦予了特殊含義,如果想在字面上表示%,需要用%25代替%。)
- 程序員數(shù)學:用Python學透線性代數(shù)和微積分
- Magento 2 Theme Design(Second Edition)
- Unity Virtual Reality Projects
- 信息安全技術
- Oracle Exadata專家手冊
- Nginx實戰(zhàn):基于Lua語言的配置、開發(fā)與架構詳解
- 精通Python自動化編程
- 深度學習:Java語言實現(xiàn)
- Mastering C++ Multithreading
- Tableau Dashboard Cookbook
- INSTANT Apache Hive Essentials How-to
- Python深度學習(第2版)
- Building Web and Mobile ArcGIS Server Applications with JavaScript(Second Edition)
- Java面試一戰(zhàn)到底(基礎卷)
- PHP從入門到精通(第7版)