IO 輸入與輸出(4) -- 字符編碼

幾乎所有程序都涉及到字符文本的處理,特別是數字通訊和電子商務的迅猛發展,應用程序之間經常交換文本格式的文檔,目前存在有多種形式的字符編碼。一個應用程序要理解別的程序所產生的文本文檔的內容,首先必須瞭解這個文檔所採用的字符編碼。

 

大家經常打開一些文本文件會發現看不懂或者是亂碼,這就是因爲它們採用了特殊的字符編碼,下面我們來了解一下什麼是字符編碼。

 

首先必須理解一個最基本的問題,計算機裏只有數字,計算機軟件裏的一切都是用數字來表示的,即便是屏幕上顯示的一個個字符也不例外。

 

ASCII(American Standard Code for Information Interchange美國標準信息交換碼)

一個字節所能表示的範圍有256個,足以容納所有的字符。例如字符a對應的數字是97,字符b對應數字是98等,這種字符與數字對應的編碼規則被稱爲ASCII,每個ASCII碼與一個8位二進制數對,ASCII碼的最高的bit位都是爲0,也就是說這些數字都在0127之間。

 

GB2312(信息交換用漢字編碼字符集·基本集)

你肯定奇怪,咱們中文呢?ASCII是美國人搞的,但咱們中國將每一箇中文字符否用兩個字節的數字來表示,也就是通常所說的GB2312。中文字符的每個字節的最高位都是1

 

GBK(漢字內碼擴展規範)

GBKGB2312的擴展碼,對不常用的漢子和許多符號進行了編碼。比如說繁體字。

 

Unicode(統一碼、萬國碼、單一碼、標準萬國碼)

爲了解決各個國家和地區使用本地化字符集帶來的不利影響,ISO(國際化標準組織)將全世界所有的符號進行了統一編碼,稱爲Unicode碼。每個字符都用了2個字節來表示(即能表示65536種字符也是就是216次方),對於英文字符采取前面加0字節的策略,實現了等長兼容。如“a”的ASCII碼爲0x61Unicode就爲0x00 0x61。使用Unicode碼不再區分國家和地區。例如“a”不管在世界的哪個國家使用,其使用Unicode編碼都是一樣的。

 

這裏要注意的是Java中的字符使用的都是Unicode編碼,Java在通過Unicode保證跨平臺的前提下,也支持本地平臺的字符集。

 

UTF-8( 8-bit UCS Transformation Format 通用字符集)

是一種針對Unicode的可變長度字符編碼(定長碼),可以用來表示Unicode標準中的任何字符,且其編碼中的第一個字節仍與ASCII兼容,也就是說ASCII碼字符保持原樣,仍然只佔用一個字節,對於其他國家的字符,UTF-8使用兩個或三個字節來表示。使用utf-8編碼的文件,通常都要用EF  BB  BF作爲文件開頭的3個字節。 如果字符是0x0000,或在0x00800x007f之間,對應的UTF碼是兩個字節,如果字符在0x08000xffff之間,對應的UTF碼是三個字節(漢字在UTF-8中是三個字節)

 

UTF-16

utf-8類似,其再Unicode編碼的基礎上做了細節上的擴充,增加了對Unicode編碼沒有包括的那些字符的表示是方式。

 

關於這些編碼的具體解釋和詳細信息,大家可以查詢:維基百科

 

 版權聲明: 原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章