我確定有很多關于Unicode和Python的說明,但為了方便自己的理解使用,我還是打算再寫一些關于它們的東西。
字節流 vs Unicode對象
我們先來用Python定義一個字符串。當你使用string類型時,實際上會儲存一個字節串。
[ a ][ b ][ c ] = "abc"[ 97 ][ 98 ][ 99 ] = "abc"
在這個例子里,abc這個字符串是一個字節串。97.,98,,99是ASCII碼。Python 2.x版本的一個不足之處就是默認將所有的字符串當做ASCII來對待。不幸的是,ASCII在拉丁式字符集里是最不常見的標準。
ASCII是用前127個數字來做字符映射。像windows-1252和UTF-8這樣的字符映射有相同的前127個字符。在你的字符串里每個字節的值低于127的時候是安全的混合字符串編碼。然而作這個假設是件很危險的事情,下面還將會提到。
當你的字符串里有字節的值大于126的時候就會出現問題了。我們來看一個用windows-1252編碼的字符串。Windows-1252里的字符映射是8位的字符映射,那么總共就會有256個字符。前127個跟ASCII是一樣的,接下來的127個是由windows-1252定義的其他字符。