2021-12-07 15:50:08|已瀏覽:316次
根據維基百科定義:字符串是由零個或多個字符組成的有限序列。而在Python 3中,它有著更明確的意思:字符串是由Unicode碼點組成的不可變序列(Strings are immutable sequences of Unicode code points.)
字符串序列是一種不可變序列,這意味著它不能像可變序列一樣,進行就地修改。例如,在字符串“Python”的基礎上拼接“Cat”,得到字符串“PythonCat”,新的字符串是一個獨立的存在,它與基礎字符串“Python”并沒有關聯關系。
字符串這種序列與其它序列(如列表、元組)的不同之處在于,它的“元素”限定了只能是Unicode碼點。Unicode碼點是什么呢?簡單理解,就是用Unicode編碼的字符。那字符是什么呢?字符是人類書寫系統的各類符號,例如阿拉伯數字、拉丁字母、中文、日文、藏文、標點符號、控制符號(換行符、制表符等)、其它特殊符號(@#¥%$*等等)。那Unicode編碼又是什么呢?Unicode別名是萬國碼、國際碼,它是一種適用性最廣的、將書寫字符編碼為計算機數字的標準。
重所周知,在最底層的計算機硬件世界里,只有0和1。那么,怎么用這個二進制數字,來表示人類的文化性的字符呢?這些字符數量龐大,而且還在日益增長與變化,什么樣的編碼方案才是最靠譜的呢?
歷史上,人類創造了多種多樣的字符編碼標準,例如ASCII(1963年)編碼,以西歐語言的字符為主,它的缺點是只能編碼128個字符;例如GB2312(1981年),這是中國推出的編碼標準,在兼容ASCII標準的基礎上,還加入了對日文、俄文等字符的編碼,但缺點仍是編碼范圍有限,無法表示古漢語、繁體字及更多書寫系統的字符。
Unicode編碼標準于1991年推出,至今迭代到了第11版,已經能夠編碼146個書寫系統的130000個字符,可謂是無所不包,真不愧是“國際碼”。Unicode編碼其實是一個二進制字符集,它建立了從書寫字符映射成唯一的數字字符的關系,但是,由于各系統平臺對字符的理解差異,以及出于節省空間的考慮,Unicode編碼還需要再做一次轉換,轉換后的新的二進制數字才能作為實際存儲及網絡傳輸時的編碼。
這種轉換方式被稱為Unicode轉換格式(Unicode Transformation Format,簡稱為UTF),它又細分為UTF-8、UTF-16、UTF-32等等方式。我們最常用的是UTF-8。為什么UTF-8最常用呢?因為它是可變長度的編碼方案,針對不同的字符使用不同的字節數來編碼,例如編碼英文字母時,只需要一個字節(8個比特),而編碼較復雜的漢字時,就會用到三個字節(24個比特)。
二進制的編碼串可以說是給機器閱讀的,為了方便,我們通常會將其轉化為十六進制,例如“中”字的Unicode編碼可以表示成0x4e2d ,其UTF-8編碼可以表示為0xe4b8ad,'0x'用于開頭表示十六進制,這樣就簡潔多了。不過,UTF-8編碼的結果會被表示成以字節為單位的形式,例如“中”字用UTF-8編碼后的字節形式是\xe4\xb8\xad 。
Python中為了區分Unicode編碼與字節碼,分別在開頭加“u”和“b”以示區分。在Python 3中,因為Unicode成了默認編碼格式,所以“u”被省略掉了。
總結一下,Python 3 中的字符串是由Unicode碼點組成的不可變序列,也即是,由采用Unicode標準編碼的字符組成的不可變序列。Unicode編碼將書寫系統的字符映射成了計算機二進制數字,為了方便,通常顯示為十六進制;在運算內存中,字符以Unicode編碼呈現,當寫入磁盤或用于網絡傳輸時,一般采用UTF-8方式編碼。本文由培訓無憂網牛耳教育專屬課程顧問整理發布,希望能夠對想學習長沙Python開發培訓的同學有所幫助。更多Python開發培訓課程歡迎關注培訓無憂網Python開發培訓頻道或添加老師微信:15033336050
注:尊重原創文章,轉載請注明出處和鏈接 http://m.dedgn.cn/news-id-6636.html 違者必究!部分文章來源于網絡由培訓無憂網編輯部人員整理發布,內容真實性請自行核實或聯系我們,了解更多相關資訊請關注python培訓頻道查看更多,了解相關專業課程信息您可在線咨詢也可免費申請試課。關注官方微信了解更多:150 3333 6050