python第一篇:Python 字符串編


Python字符串編碼

字符串編碼的前世今生

1. 一個字節由8個bit組成,所以1個字節能表示的最大數為255;

2. 計算機是美國人發明的,所以一個字節可以表示所有的字符了,所以ASCII就成為美國人的標准編碼;

3.但是ASCII編碼處理漢字是明顯不夠的,中文不止255個漢字,所以中國制定GB2312編碼,用兩個字節表示一個漢字,GB2312還把ASCII包含進去了,同理,日文。韓文等等上百個國家為了解決問題都發展了一套字節的編碼,標准就越來越多,如果出現多種語言混合現實就一定會亂碼;

4.這時候出現了Unicode編碼,將所有的標准統一到了一套編碼里面;

5.那ASCII編碼和Unicode編碼之間是如何進行轉換的?下面是具體的轉換方法:

  5.1 字母A用ASCII編碼表示的十進制是65,二進制即為0100 0001

  5.2 漢字“中”已經超出了ASCII編碼的范圍,用Unicode編碼十進制是20013 二進制是0100 1110 0010 1101

  5.3 A字母用Unicode編碼時只需要在前面補上0  即為0000 0000 0100 0001

6.亂碼問題解決了,但是同時又出現了一個新的問題,如果全部是英文字母的話,Unicode編碼比ASCII編碼多消耗一倍的內存,同時網絡傳輸的時候也多消耗一倍的帶寬;

7.所以這個時候出現了長度可變化的utf-8的編碼。

 

字符與字節

1byte = 8bit
1KB = 1024 bytes
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB

ASCII編碼: 一個英文字母占據一個字節的空間,一個中文字母占據兩個字節的空間;

utf-8編碼: 一個英文字符等於一個字節,一個中文(含繁體)等於三個字節。中文標點占據三個字節,英文標點占據一個字節;

Unicode編碼: 一個英文等於兩個字節,一個中文(含繁體)等於兩個字節。中文標點占據兩個字節,英文標點占據兩個字節。

 

Unicode編碼為GB2312編碼  utf-8編碼 ASCII等編碼的一個父級編碼,那這些子編碼之間子在需要相互轉換的時候就需要借助父級編碼Unicode。子編碼是可以直接轉換為父級編碼,然后父級編碼轉換為另一種類型的子編碼。

 

Python2和Python3字符編碼存在的問題

獲取默認編碼格式:

 

>>> import sys
>>> sys.getdefaultencoding()

我們發現在python2中默認的編碼格式是 'ascii' 編碼,在python3中默認的編碼格式為utf-8

第一步:在終端輸入python進入python2的開發環境

第二步:s = "中國"   # 獲取s的值拿到  '\xe4\xb8\xad\xe5\x9b\xbd'  說明此時的ASCII編碼無法識別漢字

 

Python2和Python3字符編碼問題的解決方案

import sys
defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding: reload(sys) sys.setdefaultencoding(defaultencoding)

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM