再談Net Framework中的編解碼

iDotNetSpace發表於2010-04-15

System.text名稱空間

.Net Framework中這個名稱空間是有關對文字進行操作的類集。具體可分為編碼解碼相關;字串操作相關;正規表示式相關,這樣三個組成部分。

 

編碼/解碼

l   在ASP.NET開發中一般不用我們自己寫程式實現對文字的編碼解碼。通常只需要對當前Page頁進行設計時或執行時的編碼指定即可,預設情況下則會使用UTF-8這種編碼。

l   從更低的層次來看,計算機處理的資料就可看作是文字與二進位制資料。需要編解碼的就是文字的資料,二進位制資料根本不需要編解碼。

l   編碼就是把文字處理為位元組集,實現讓計算機對資料進行處理,傳遞與儲存;解碼則是把位元組集處理為對人類而言有意義的文字,並由輸出裝置輸出。

l   Net Framework內部使用UTF-16這種編碼格式處理文字。

l   Net Framework中處理編碼解碼的類位於System.text名稱空間。這包括Encoding抽象基類及其派生類;Encoder/Decoder類。

Encoding

l   Encoding是個抽象類,必須繼承使用。但是它有一組靜態屬性和方法,用來返回Encoding的派生類的例項。例如:Encoding.UTF8屬性,返回的是UTF8Encoding類例項。

l   Encoding的派生類的例項也可以通過NEW建構函式而得。

l   Encoding的多個表示不同編碼的派生類,來具體完成編碼和解碼的任務。注意:還有解碼哦!

l   既然Encoding的派生類能完成編碼解碼的任務,為什麼還需要Encoder/Decoder呢?在網路傳輸時,我們有可能是把資料分幾次來傳輸;在對檔案進行讀寫時也可能是分多次來進行。問題就在於多次。假設我們某一次傳輸的位元組集,其數量不足以處理為有效的文字,麻煩就來了,例如漢字”未”用UTF-8編碼後是三個位元組,如果我們只傳輸了2個位元組,解碼後的就是亂碼而不是漢字”未”。Encoder/Decoder這兩個編解碼類,就是用來處理這樣的問題。用他們進行編解碼時,如果位元組集不足以完全解碼,就先解碼一部分,剩下的位元組集暫時保留在Decoder中,等待下一次位元組集的傳輸,這樣就能保證被解碼的是正常的文字。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-659842/,如需轉載,請註明出處,否則將追究法律責任。

相關文章