提示:上一篇文章中介紹了Python字符串的使用,本篇文章來說說Python字符串的編碼與轉義。
在此之前,我們先介紹一下在Python中如何查看一個變量的類型。
1、查看變量類型
(1)type( )
函數說明
- 在Python中,
type( )
函數是一個最實用又簡單的查看對象數據類型的方法。 type( )
函數是Python的一個內建的函數,調用它就能夠得到一個反回值,從而知道想要查詢的對像類型信息。type( )
函數的作用:
只有第一個參數時,則返回對象的類型。多個參數以后用到在詳細說。type( )
函數的使用方法:type(object)
(2)示例
"""
type()函數用來檢查值的類型。
該函數會將檢查的結果作為返回值返回,可以通過變量來接收函數的返回值。
注意: type()函數查看的是變量對應空間中存儲的值的類型。
"""
a = type('123')
print(a) # <class 'str'>
# 查看我們所學過的數據類型
print(type(1)) # <class 'int'>
print(type(1.5)) # <class 'float'>
print(type(True)) # <class 'bool'>
print(type('hello')) # <class 'str'>
print(type(None)) # <class 'NoneType'>
提示:
type( )
函數的強大功能並非只能用於查看變量類型,以后用到再總結。
2、轉義字符
(1)轉義字符說明
- 有部分符號在Python中是有特殊含義的,當需要使用符號自身原有的意思時,這時可以通過轉義字符表示。
- 轉義字符的意義就是避免出現二義性,避免系統識別錯誤。
(2)示例
# 1、如果字符串內部既包含'又包含"怎么辦?
# 可以用轉義字符`\`來標識
print("北京的金山上,"光芒"照四方。") # SyntaxError: invalid syntax
# 使用轉義字符解決
print("北京的金山上,\"光芒\"照四方。")
# 使用上邊說的引號之間的嵌套解決
print('北京的金山上,"光芒"照四方。')
"""
# 2、轉義字符`\`可以轉義很多字符,
比如`\n`表示換行,
`\t`表示制表符,
字符`\`本身也要轉義,所以`\\`表示的字符就是`\`,
"""
# 輸出結果:子曰:"學而時習之,\\n樂呵樂呵!"
s = "子曰:\"學而時習之,\\\\n樂呵樂呵!\""
print(s)
(3)常用轉義字符對照表
轉義字符 | 描述 |
---|---|
\ (在行尾時) |
續行符 |
\\ |
反斜杠符號 |
\' |
單引號 |
\" |
雙引號 |
\a |
響鈴 |
\b |
退格(Backspace ) |
\e |
轉義 |
\000 |
空 |
\n |
換行 |
\v |
縱向制表符 |
\t |
橫向制表符,一個tab鍵(4個空格)的距離 |
\r |
回車 |
\f |
換頁 |
\oyy |
八進制數,yy 代表的字符,例如:\o12 代表換行 |
\xyy |
十六進制數,yy 代表的字符,例如:\x0a 代表換行 |
\other |
其它的字符以普通格式輸出 |
提示:轉義、去轉義在線工具:http://www.bejson.com
3、字符編碼
字符串有一個比較特殊的問題,就是編碼問題。
(1)字符編碼介紹
1)字符編碼的由來:
因為計算機只能處理二進制數字,也就是0和1。如果要處理文本,就必須先把文本轉換為數字才能處理。
由於計算機是美國人發明的,因此,最早只有127個字符被編碼到計算機里,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII
編碼,比如大寫字母A
的編碼是65
,小寫字母z
的編碼是122
。
但是要處理中文顯然一個字節是不夠的,至少需要兩個字節,而且還不能和ASCII編碼沖突,所以,中國制定了GB2312
編碼,用來把中文編進去。
你可以想得到的是,全世界有上百種語言,日本把日文編到Shift_JIS
里,韓國把韓文編到Euc-kr
里,各國有各國的標准,就會不可避免地出現沖突,結果就是,在多語言混合的文本中,顯示出來會有亂碼。
2)Unicode
編碼介紹:
如上所述,Unicode
編碼應運而生,又稱為萬國碼。Unicode
編碼把所有語言都統一到一套編碼里,這樣就不會再有亂碼問題了。
Unicode
編碼標准也在不斷發展,但最常用的是用兩個字節表示一個字符(如果要用到非常偏僻的字符,就需要4個字節)。現代操作系統和大多數編程語言都直接支持Unicode
編碼。
3)UTF-8
編碼介紹:
然而新的問題又出現了:如果統一成Unicode
編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全部是英文的話,用Unicode
編碼比ASCII
編碼需要多一倍的存儲空間,在存儲和傳輸上就十分不划算。
所以,本着節約的精神,又出現了把Unicode
編碼轉化為“可變長編碼”的UTF-8
編碼。UTF-8
編碼把一個Unicode
編碼字符根據不同的數字大小編碼成1-6個字節【8個比特(bit
)作為一個字節(byte
)】,常用的英文字母被編碼成1個字節,漢字通常是3個字節,只有很生僻的字符才會被編碼成4-6個字節。如果你要傳輸的文本包含大量英文字符(如果統一標准的話,一個英文字符要補2-3個字節的0),用UTF-8編碼就能節省空間。
如下圖所示:
因為我們編寫的代碼文件中,絕大部分都是英文,所以我們常用的編碼格式為UTF-8
編碼。
UTF-8
編碼還有一個額外的好處,就是ASCII
編碼實際上可以被看成是UTF-8
編碼的一部分,所以,大量只支持ASCII
編碼的歷史遺留軟件可以在UTF-8
編碼下繼續工作。
(2)Python中的字符編碼
Python3的默認編碼是UTF-8
編碼,可通過如下代碼查看。
import sys
# 可查看Python3的默認編碼。
print(sys.getdefaultencoding())
# 下面的方式也可以查看
print(sys.stdout.encoding)
Python3中字符編碼經常會使用到decode
和encode
函數。特別是在抓取網頁中,這兩個函數用的熟練非常有好處。
encode
(編碼)的作用,使我們看到的直觀的字符轉換成計算機內的字節形式。decode
(解碼)剛好相反,把字節形式的字符轉換成我們看的懂的、直觀的、“人模人樣”的形式。
如下圖所示:
(3)編碼格式應用於不同場景
數據在內存當中處理時,使用的格式是Unicode
,統一標准。
在硬盤上存儲,或者是在網絡上傳輸時,用的是UTF-8
,因為省空間。
參考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017075323632896