在Python語言中,Uincode字符串處理一直是一個容易讓人迷惑的問題。許多Python愛好者經常因為搞不清Unicode、UTF-8還有其它許許多多的編碼之間的區別而大傷腦筋。筆者曾經也是這“傷腦筋一族”的成員,但經過半年多的努力,現在終于初步弄清楚其中的一些關系?,F將其整理如下,與各位同仁同享。同時也希望能借這篇短文拋磚引玉,吸引更多真正的高手加入進來,共同完善我們的Python中文環境。
本文所提到的各種觀點,一部分是查閱資料所得,還有一部分是筆者利用已有各種編碼數據用“猜測加驗證”法得到。筆者自問才疏學淺,其中怕是藏有不少錯誤。各位看官中不乏高手,如果有哪一位發現其中哪里有錯,萬望各位高人不吝賜教。筆者自己丟丑事小,觀點錯誤誤了別人事大,因此各位大可不必顧忌筆者的面子問題。
第一節 文字編碼和Unicode標準
要解釋Unicode字符串就必須先從什么是Unicode編碼開始說起。眾所周知,文本顯示一直是計算機顯示功能必須解決的基本問題。而計算機并不識字,它實際上是把文本看做是一串“圖片”,每張“圖片”對應一個字符。每個計算機程序在顯示文本時,必須借助一個記錄這個文字“圖片”如何顯示的“圖片”集合,從中找到每一個字符對應“圖片”的數據,并依樣畫葫蘆地把這個字“畫”到屏幕上。這個“圖片”就被稱為“字?!?,而記錄字模顯示數據的集合就被稱為“字符集”。為方便程序查找,每個字符的字模數據在字符集中必須是有序排列的,而且每個字符都會被分配一個獨一無二的ID,這個ID就是字符的編碼。而在計算機進行字符數據處理時,總是用這個編碼代表它表示的那個字符。因此,一個字符集就規定了一組計算機能夠處理的字符數據。顯然,不同國家指定的字符集大小不同,相應的字符編碼也不同。
在計算機歷史上,最為廣泛使用的標準化字符集當首推ASCII字符集。它實際上是美國制訂的標準,針對北美用戶開發。它使用7個二進制位編碼,可以表示128個字符。這個字符集最終被ISO組織正式采納為國際標準,并且大量應用在各種計算機體系上?,F如今,所有PC機的BIOS中都內含了ASCII字符集的字模,其深入人心可見一斑。
但是,當計算機在各個國家大規模普及時,ASCII編碼的局限性就暴露出來了:它的字符空間實在有限,無法容納更多的字符,可是絕大多數語言需要使用的字符數目都遠不止128個。為了能正確處理本國文字,各個國家官方或民間紛紛開始了設計本國文字編碼集的工作,并且最終涌現出許許多多針對各個國家文字的字符編碼,如針對西歐字符的ISO-8859-1編碼,針對簡體中文的GB系列編碼,還有針對日文的SHIFT-JIS編碼等等。同時,為了保證各個新的字符集能夠兼容原本的ASCII文本,大多數字符集不約而同地都將ASCII字符作為自己前128個字符,并使其編碼與ASCII編碼一一對應。
新聞熱點
疑難解答