python中字符串的編碼與解碼詳析
1. 常用的編碼
- ASCII:只能表示一些字母,數(shù)字和特殊的字符,占一個字節(jié)
- GBK:國家簡體中文字符集和繁體字符集,兼容ASCII,占兩個字節(jié)
- Unicode:能夠表示全世界上所有的字符,Unicode有人說占4個字節(jié)也有人說占2個字節(jié),但中文占2個字節(jié)
- UTF-8:Unicode的壓縮版,占1~3個字節(jié),其中中文占三個字節(jié)
2.補充:計算機表示的單位:
bit: 位,計算機最小的表示單位
bytes:字節(jié),最小的存儲單位,1bytes=8bit,1bytes簡寫成1B
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
......
3.ASCII編碼
ASCII編碼是基于拉丁字母一套編碼,主要是顯示現(xiàn)代英語和其西歐語言,是最早通用的單字節(jié)編碼系統(tǒng),具體ASCII對照表如下:
在對照表中需要記住的是大寫字母A的編碼是65,小寫字母a的編碼的97即可。
在python中可以使用chr和ord方法進行轉(zhuǎn)換:
# 將數(shù)字類型轉(zhuǎn)換成ASCII對應(yīng)的字符 print(chr(97)) # a # 將數(shù)字轉(zhuǎn)換成對應(yīng)的數(shù)據(jù) print(ord("A")) # 65 # 或者使用
但隨著事件的發(fā)展,ASCII編碼擴展到了256個字符,編碼 對照表如下:
其中后128個字符稱為擴展ASCII碼
2.GBK和GB2312編碼
由于ASCII編碼只能由256個字符組成,然只能由1個字節(jié)來表示中文是不可能的,因此制定了GB2312編碼,用來表示中文的對照表
4.Unicode
為了解決各個國家編碼沖突的問題,Unicode編碼就因此而生,Unicode把所有語言都統(tǒng)一到一套編碼里面,就會避免沖突,產(chǎn)生亂碼。
Unicodeb標準在不斷發(fā)展,最常用的是用兩個字節(jié)表示一個字符,也有的字符是4個字節(jié),但是中文是占兩個字節(jié)。如果統(tǒng)一成Unicode編碼,在存儲和傳輸上就不劃算
5.UTF-8編碼
為了解決Unicode編碼存儲過大的問題,就推出了可變長編碼UTF-8,UTF-8編碼把一個Unicode字符依據(jù)不同的數(shù)據(jù)大小編程1~6個字節(jié),其中中文就占3個字節(jié)
6.編碼和解碼
1.編碼操作
可以通過encode進行編碼,其中語法如下:
對字符串進行ASCII編碼(只能轉(zhuǎn)換數(shù)字,英文字母和一些符號)
# 方式1: 通過bytes方法 bytes('a', 'ASCII') # 方式2: 通過encode方法進行 'a'.encode('ASCII')
將字符串轉(zhuǎn)換成gbk編碼格式
# 方式1: 通過encode方法進行 print('你好'.encode('GBK')) # 編碼之后的結(jié)果為:b'\xc4\xe3\xba\xc3' # 方式2: 通過bytes類型 print(bytes('我愛你', 'GBK')) # 編碼之后的結(jié)果為:b'\xce\xd2\xb0\xae\xc4\xe3'
將字符串轉(zhuǎn)換成Unicode編碼格式
# 方式1: 通過encode方法進行 print('你好'.encode('unicode_escape')) # 編碼之后的結(jié)果為:b'\\u4f60\\u597d' # 方式2: 通過bytes類型 print(bytes('我愛你', 'unicode_escape')) # 編碼之后的結(jié)果為:b'\\u6211\\u7231\\u4f60'
將字符串轉(zhuǎn)換成UTF-8編碼格式
# 方式1: 通過encode方法進行 print('你好'.encode('utf-8')) # 編碼之后的結(jié)果為:b'\xe4\xbd\xa0\xe5\xa5\xbd' # 方式2: 通過bytes類型 print(bytes('我愛你', 'utf-8')) # 編碼之后的結(jié)果為:b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0'
2.解碼操作
將GBK編碼格式轉(zhuǎn)換成字符串
# 通過decode方法解碼 print(b'\xc4\xe3\xba\xc3\xce\xd2\xb0\xae\xc4\xe3'.decode('GBK')) # 解碼之后結(jié)果為:你好我愛你
將UTF-8編碼格式轉(zhuǎn)換成字符串
# 通過decode方法解碼 print(b'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0'.decode('utf-8')) # 解碼之后結(jié)果為:你好我愛你
將Uniconde編碼格式轉(zhuǎn)換成字符串
# 通過decode方法解碼 print(b'\\u4f60\\u597d\\u6211\\u7231\\u4f60'.decode('GBK')) # 解碼之后結(jié)果為:你好我愛你
到此這篇關(guān)于python中字符串的編碼與解碼的文章就介紹到這了,更多相關(guān)python字符串的編碼與解碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python Django獲取URL中的數(shù)據(jù)詳解
這篇文章主要介紹了Python Django獲取URL中的數(shù)據(jù)詳解,小編覺得挺不錯的,這里分享給大家,供需要的朋友參考2021-11-11Python3多進程 multiprocessing 模塊實例詳解
這篇文章主要介紹了Python3多進程 multiprocessing 模塊,結(jié)合實例形式詳細分析了Python3多進程 multiprocessing 模塊的概念、原理、相關(guān)方法使用技巧與注意事項,需要的朋友可以參考下2018-06-06python使用百度或高德地圖獲取地理位置并轉(zhuǎn)換
用python處理地理位置是非常常見的需求,下面這篇文章主要給大家介紹了關(guān)于python使用百度或高德地圖獲取地理位置并轉(zhuǎn)換的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2022-07-07