python3.x編碼解碼unicode字符串的實現(xiàn)示例
python的ASCII碼范圍為[0,127],非ASCII碼范圍大于127.
通過str.encode(encoding)和bytes(str,encoding)根據(jù)編碼名將字符串編碼為原始字節(jié)。
通過bytes.decode(encoding)和str(bytes,encoding)根據(jù)編碼名將原始字節(jié)解碼為字符串。
gbk編碼中,1個漢字表示2個字節(jié),utf-8編碼中,1個漢字表示3個字節(jié)。
1個字節(jié)用2位16進制表示。編碼和解碼必須送編碼名encoding。
‘\xNN’為兩個十六進制,表示1個字節(jié),
’\uNNNN’為unicode轉(zhuǎn)義,表示四個十六進制位,編碼1個2字節(jié)(16位)字符碼,
’\UNNNNNNNN’為unicode轉(zhuǎn)義,表示八個十六進制位,編碼1個4字節(jié)(32位)字符碼,
2個16進制對應(yīng)1個字節(jié)。
注意,2字節(jié)用小u(\u),4字節(jié)用大U(\U)。
1 編碼ASCII文本
ASCII文本編碼是一種Unicode,存儲為表示字符的字節(jié)值的一個序列。
ASCII碼范圍0-127.通過編碼后,在字符前加b或B,打印值和字符相同。
>>> ord('a')
97
>>> chr(97)
'a'
>>> s='abc'
>>> s
'abc'
>>> len(s)
3
>>> [ord(c) for c in s]
[97, 98, 99]
>>> s.encode('ascii')
b'abc'
>>> s.encode('gbk')
b'abc'
>>> s.encode('utf-8')
b'abc'
>>> b_asc=s.encode('ascii')
>>> b_gbk=s.encode('gbk')
>>> b_utf8=s.encode('utf-8')
>>> list(map(list,(b_asc,b_gbk,b_utf8)))
[[97, 98, 99], [97, 98, 99], [97, 98, 99]]
2 編碼非ASCII文本
編碼非ASCII字符(編碼值大于127),需用十六進制或Unicode轉(zhuǎn)義。
十六進制轉(zhuǎn)義用于單字節(jié),Unicode用于兩個或四個字節(jié)。
示例
>>> a,b=0xa5,0xa9
>>> a,b
(165, 169)
>>> hex(a),hex(b)
('0xa5', '0xa9')
>>> chr(a),chr(b)
('¥', '?')
# \xNN 十六進制單字節(jié)格式
>>> s1='\xa5\xa9'
# \uNNNN Unicode 雙字節(jié)格式
>>> s2='\u00a5\u00a9'
>>> s1,s2
('¥?', '¥?')
>>> len(s1),len(s2)
(2, 2)
# \UNNNNNNNN Unicode 四字節(jié)格式
>>> s3='\U000000a5'
>>> s3
'¥'
3 編碼和解碼非ASCII文本
描述
| # | 項目 | 描述 |
|---|---|---|
| 1 | \xNN | 2位16進制,表示單字節(jié),用\x轉(zhuǎn)義,表示ASCII文本的unicode |
| 2 | \uNNNN | 4位16進制,表示雙字節(jié),用\u轉(zhuǎn)義,表示非ASCII文本的unicode |
| 3 | \UNNNNNNNN | 8位16進制,表示四字節(jié),用\U轉(zhuǎn)義,表示非ASCII文本的unicode |
| 4 | 單字節(jié) | 1個字節(jié)2位16進制 |
| 5 | ASCII編碼 | 范圍[0-127] |
| 6 | 非ASCII編碼 | 范圍大于127 |
| 7 | gbk編碼 | 1個漢字2個字節(jié),1個字節(jié)2位16進制 |
| 8 | utf-8編碼 | 1個漢字3個字節(jié),1個字節(jié)2位16進制 |
| 9 | unicode文本 | python3.x的字符串str為unicode文本 |
| 10 | ord© | 獲取字符c的unicode編碼,為整數(shù) |
| 11 | hex(i) | 獲取整數(shù)i的16進制 |
| 12 | hex(ord©) | 獲取字符c的unicode編碼的16進制,用\u轉(zhuǎn)義 |
| 13 | str.encode(encoding) | 根據(jù)編碼名encoding將字符串str編碼為原始字節(jié),返回bytes類型數(shù)據(jù),b或B開頭 |
| 14 | bytes.decode(encoding) | 根據(jù)編碼名encoding將原始字節(jié)解碼為字符串,返回str類型數(shù)據(jù) |
| 15 | bytes(str,encoding) | 根據(jù)編碼名encoding將字符串str編碼為原始字節(jié),返回bytes類型數(shù)據(jù),b或B開頭 |
| 16 | str(bytes,encoding) | 根據(jù)編碼名encoding將原始字節(jié)解碼為字符串,返回str類型數(shù)據(jù) |
示例
>>> c1,c2='梯','閱'
# \xNN 16進制單字節(jié), \uNNNN 16進制雙字節(jié) , \UNNNNNNNN 16進制四字節(jié)
>>> c1_hexstr,c2_hexstr=hex(ord(c1)),hex(ord(c2))
# ord(c)獲取c的unicode值,通過hex(i)獲取unicode值的16進制
>>> c1_hexstr,c2_hexstr
('0x68af', '0x9605')
# \uNNNN 四位16進制表示的2個字節(jié),1個漢字為2個字節(jié)的unicode
# 每個字節(jié)的unicode 用\u 轉(zhuǎn)義 原始字節(jié)
>>> c1c2='\u68af\u9605'
>>> c1c2
'梯閱'
>>> len(c1c2)
2
# ASCII 范圍為[0,127]
>>> c1c2.encode('ascii')
Traceback (most recent call last):
File "<pyshell#82>", line 1, in <module>
c1c2.encode('ascii')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
# 通過 編碼名 gbk 的碼表編碼, 1個 漢字為2個字節(jié) ,1個字節(jié)為2位16進制
# str.encode(encoding) 根據(jù)編碼名 將字符串編碼為原始字節(jié)
>>> c1c2.encode('gbk')
b'\xcc\xdd\xd4\xc4'
>>> '梯閱'.encode('gbk')
b'\xcc\xdd\xd4\xc4'
# 通過 編碼名 utf-8 的碼表編碼,1個 漢字為 3個字節(jié),1個字節(jié)為2位16進制
>>> c1c2.encode('utf-8')
b'\xe6\xa2\xaf\xe9\x98\x85'
>>> type(c1c2.encode('utf-8'))
<class 'bytes'>
>>> bytes(c1c2,encoding='utf-8')
b'\xe6\xa2\xaf\xe9\x98\x85'
>>> gbk_c1c2_raw=b'\xcc\xdd\xd4\xc4'
>>> utf8_c1c2_raw=b'\xe6\xa2\xaf\xe9\x98\x85'
>>> len(gbk_c1c2_raw),len(utf8_c1c2_raw)
(4, 6)
# bytes.decode(encoding) 根據(jù)編碼名 將原始字節(jié)解碼為字符串
>>> gbk_c1c2_dcd=gbk_c1c2_raw.decode('gbk')
>>> utf8_c1c2_dcd=utf8_c1c2_raw.decode('utf-8')
>>> gbk_c1c2_dcd,utf8_c1c2_dcd
('梯閱', '梯閱')
>>> str(gbk_c1c2_raw,encoding='gbk')
'梯閱'
>>> len(gbk_c1c2_dcd),len(utf8_c1c2_dcd)
(2, 2)到此這篇關(guān)于python3.x編碼解碼unicode字符串的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)python3.x編碼解碼unicode內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何在pycharm中配置pyqt5設(shè)計GUI操作教程
這篇文章主要介紹了如何在pycharm中配置pyqt5設(shè)計GUI的操作教程,有需要的朋友可以借鑒參考下,希望大家可以多多交流,討論相關(guān)問題共同提升2021-08-08
Python調(diào)用系統(tǒng)命令os.system()和os.popen()的實現(xiàn)
這篇文章主要介紹了Python調(diào)用系統(tǒng)命令os.system()和os.popen()的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Python+selenium點擊網(wǎng)頁上指定坐標(biāo)的實例
今天小編就為大家分享一篇Python+selenium點擊網(wǎng)頁上指定坐標(biāo)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
python實現(xiàn)數(shù)據(jù)可視化超詳細講解
Python的數(shù)據(jù)可視化是將數(shù)據(jù)以圖形或圖表的形式呈現(xiàn),使復(fù)雜的信息更易于理解和分析,本文給大家詳細介紹了python數(shù)據(jù)可視化的實現(xiàn),文中通過圖文結(jié)合的方式介紹的非常詳細,需要的朋友可以參考下2024-06-06
利用jupyter網(wǎng)頁版本進行python函數(shù)查詢方式
這篇文章主要介紹了利用jupyter網(wǎng)頁版本進行python函數(shù)查詢方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
解決python中畫圖時x,y軸名稱出現(xiàn)中文亂碼的問題
今天小編就為大家分享一篇解決python中畫圖時x,y軸名稱出現(xiàn)中文亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01

