本文目錄一覽:
python有哪幾種編碼方式
第一種:ASCII碼。是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,它是現今最通用的單位元組編碼系統,並等同於國際標準IS/IEC
646。
由於計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機李,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母a的編碼是97,後128個稱為擴展ASCII碼。
第二種:GBK和GB2312。能在計算機中顯示中文字符是至關重要的,然而ASCII表裡一個偏旁部首都沒有,所以我們需要一個關於中文和數字對應的關係表,一個位元組只能最多表示256個字符,用處理中文顯然一個位元組是不夠的,所以我們需要採用兩個位元組來表示,所以中國制定了GB2312編碼,用來將中文編寫進去。
第三種:Unicode。因為各個國家都有一套自己的編碼,所以無法避免衝突,因此Unicode誕生了。它可以把所有語言都統一到一套編碼里,這樣就不會存在亂碼問題了,現代操作系統和大多數編程語言都直接支持Unicode。
第四種:UFT-8。基於節約的原則,出現了把Unicode編碼轉化為可變長編碼的UTF-8編碼。而UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成一個位元組,漢字通常是3個位元組,只有很生僻的字符才會被編碼成4-6個位元組,如果你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間。
python str與bytes編碼解碼
下面一張圖搞懂編碼、解碼、編碼表之間的關係。
不難看出,它們是一種根據編碼表進行翻譯、映射的過程:
實際上,字符串類型只有encode()方法,沒有decode()方法,而bytes類型只有decode()方法而沒有encode()方法。
二進制格式的數據也常稱為裸數據(raw data),所以str數據經過編碼後得到raw data,raw data解碼後得到的str。
上面說了,編碼是將字符數據轉換成位元組數據(raw data),解碼是將位元組數據轉換成字符數據。在Python中字符數據也就是字符串,即str類型,位元組數據也就是bytes類型或bytearray類型。
編碼時,可以使用位元組類型的構造方法bytes()、bytearray()來構造位元組,也可以使用str類型的encode()方法來轉換。
解碼時,可以使用str類型的構造方法str()來構造字符串,也可以使用bytes、bytearray()類型的decode()方法。
另外需要注意的是,編碼和解碼的過程中都需要指定編碼表(字符集),默認採用的是utf-8字符集。
例如,使用encode()的方式將str編碼為bytes數據。
使用bytes()和bytearray()將str構造成bytes或bytearray數據,這兩個方法都要求str-byte的過程中給定編碼。
實際上,bytes()、bytearray()這兩個方法構造位元組數據的時候還有點複雜,因為可以從多個數據源來構造,比如字符串、整數值、buffer。如何使用這兩個方法構造位元組數據,詳細內容參考help(bytes)和help(bytearray)給出的說明,這裡給幾個簡單示例。
構造bytes的方式:
構造bytearray的方式:
解碼是位元組序列到str類型的轉換。
例如,使用decode()方法進行解碼”我”字,它的utf-8的編碼對應為”\xe6\x88\x91″:
使用str()進行轉換。
當編碼、解碼的過程使用了不同的(不兼容的)編碼表時,就會出現亂碼。所以,解決亂碼的唯一方式是指定對應的編碼表進行編碼、解碼。
例如,使用utf-8編碼”我”字,得到一個bytes序列,然後使用gbk解碼這個bytes序列。
這裡報錯了,因為utf-8的位元組序列里有gbk無法解碼的位元組。如果使用文本編輯器一樣的工具去顯化這個過程,得到的將是亂碼字符。
原文地址:
python數據類型有哪些
數據類型是每種編程語言必備的屬性,只有給數據賦予明確的數據類型,計算機才能對數據進行處理運算,因此,使用正確的數據類型是十分有必要的,以下是Python編程常用的數據類型:
一、數字型
Python數字類型主要包括int(整型)、long(長整型)和float(浮點型),但是在Python3中就不再有long類型了。
1、int(整型)
在32位機器上,整數的位數是32位,取值範圍是-231~231-1,即-2147483648~214748364;在64位系統上,整數的位數為64位,取值範圍為-263~263-1,即9223372036854775808~9223372036854775807。
2、long(長整型)
Python長整型沒有指定位寬,但是由於機器內存有限,使用長的長整數數值也不可能無限大。
3、float(浮點型)
浮點型也就是帶有小數點的數,其精度和機器有關。
4、complex(複數)
Python還支持複數,複數由實數部分和虛數部分構成,可以用 a + bj,或者 complex(a,b) 表示, 複數的實部 a 和虛部 b
都是浮點型。
二、字符串
在Python中,加了引號的字符都被認為是字符串,其聲明有三種方式,分別是:單引號、雙引號和三引號;Python中的字符串有兩種數據類型,分別是str類型和unicode類型,str類型採用的ASCII編碼,無法表示中文,unicode類型採用unicode編碼,能夠表示任意字符,包括中文和其他語言。
三、布爾型
和其他編程語言一樣,Python布爾類型也是用於邏輯運算,有兩個值:True(真)和False(假)。
四、列表
列表是Python中使用最頻繁的數據類型,集合中可以放任何數據類型,可對集合進行創建、查找、切片、增加、修改、刪除、循環和排序操作。
五、元組
元組和列表一樣,也是一種序列,與列表不同的是,元組是不可修改的,元組用」()」標識,內部元素用逗號隔開。
六、字典
字典是一種鍵值對的集合,是除列表以外Python之中最靈活的內置數據結構類型,列表是有序的對象集合,字典是無序的對象集合。
七、集合
集合是一個無序的、不重複的數據組合,它的主要作用有兩個,分別是去重和關係測試。
Python基本編碼格式
1、一般來說,聲明編碼格式在腳本中是必需的。2、如果Python源碼文件沒有聲明編碼格式,Python解釋器會默認使用ASCII編碼。但出現非ASCII編碼的字符,Python解釋器就會報錯。
1、Python 採用代碼縮進和冒號( : )來區分代碼塊之間的層次。2、在 Python 中,對於類定義、函數定義、流程控制語句、異常處理語句等,行尾的冒號和下一行的縮進,表示下一個代碼塊的開始,而縮進的結束則表示此代碼塊的結束。3、Python 中實現對代碼的縮進,可以使用空格或者 Tab 鍵實現。但無論是手動敲空格,還是使用 Tab 鍵,通常情況下都是採用 4 個空格長度作為一個縮進量(默認情況下,一個 Tab 鍵就表示 4 個空格)。4、對於 Python 縮進規則,初學者可以這樣理解,Python 要求屬於同一作用域中的各行代碼,它們的縮進量必須一致,但具體縮進量為多少,並不做硬性規定。
正確示例代碼:
錯誤示例代碼:
Python中使用 # 進行注釋,我們在使用# 的時候,# 號後面要空一格在行內注釋的時候,中間應該至少加兩個空格
print(“你好,世界”) # 注釋
** 使用的一般性原則:**
1、在二元運算符兩邊各空一格,算術操作符兩邊的空格可靈活使用,但兩側務必要保持一致2、不要在逗號、分號、冒號前面加空格,但應該在它們後面加(除非在行尾)3、函數的參數列表中,逗號之後要有空格4、函數的參數列表中,默認值等號兩邊不要添加空格5、左括號之後,右括號之前不要加添加空格6、參數列表, 索引或切片的左括號前不應加空格
使用的一般性原則:
1、編碼格式聲明、模塊導入、常量和全局變量聲明、頂級定義和執行代碼之間空兩行2、頂級定義之間空兩行,方法定義之間空一行3、在函數或方法內部,可以在必要的地方空一行以增強節奏感,但應避免連續空行
1、導入總應該放在文件頂部,位於模塊注釋和文檔字符串之後,模塊全局變量和常量之前。
2、導入應該按照從最通用到最不通用的順序分組,分組之間空一行:
3、每個 import 語句只導入一個模塊,盡量避免一次導入多個模塊
命名規範這一塊的大家應該都比較熟悉了,但是不同的編程語言之間的明明規範也是有所區別的~
Python命名建議遵循的一般性原則:
引號使用的一般性原則:
Python跟其他幾個主流編程語言的分號使用區別很大Python的代碼末尾不需要加分號,而Java和C#等都需要添加
不要在行尾添加分號,也不要用分號將兩條命令放在同一行,例如:
Python學習日記
python123漢字的unicode編碼值
python的默認編碼是ascii,可以通過sys.setdefaultencoding(‘utf-8’)函數設置python的默認編碼。
python中可以通過encode和decode的方式改變數據的編碼,比如:
u’漢字’
u’\u6c49\u5b57′
u’漢字’.encode(‘utf-8’)
‘\xe6\xb1\x89\xe5\xad\x97’
u’漢字’.encode(‘utf-8’).decode(‘utf-8’)
u’\u6c49\u5b57′
我們可以通過這兩個函數設置編碼。
那麼,python中的str是什麼類型?
import binascii
‘漢字’
‘\xba\xba\xd7\xd6’
type(‘漢字’)
print binascii.b2a_hex(‘漢字’)
babad7d6
print binascii.b2a_hex(u’漢字’)
Traceback (most recent call last):
File “”, line 1, in
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in
position 0-1: ordinal not in range(128)
print binascii.b2a_hex(u’漢字’.encode(‘utf-8’))
e6b189e5ad97
print binascii.b2a_hex(u’漢字’.encode(‘gbk’))
babad7d6
binascii是將數據的二進制轉換成ascii,上面的解釋是:『漢字’的類型是str,二進制是babad7d6,u『漢字’是無法轉換成ascii,這樣就報出了開頭的第一個錯誤。解決辦法就是把它.encode(『utf-8′)成str類型。因為我命令行是windows默認的GBK編碼,所有u’漢字’.encode(『gbk’)的時候,輸出結果和『漢字’結果一樣。
原創文章,作者:VCTP,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/137743.html