python中的編碼和解碼及\x和\u問題
編碼和解碼及\x和\u問題
“字符在內(nèi)存里的表示是unicode,如果要存盤或者發(fā)到網(wǎng)絡就經(jīng)過utf-8,然后對端收到依次解碼。”
Python 3里面,str在內(nèi)存里是unicode表示的
‘中文’ == ‘\u4e2d\u6587’
'中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
?'\u4e2d\u6587'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'1個漢字用unicode表示一般是2個byte,
例如:
‘中’=\u4e2d(十六進制寫法【即2bytes】)
'A'.encode('ascii')
>>>b'A'
('\u0041').encode('ascii')
>>>b'A'
'A'.encode('utf-8')
>>>b'A'note: b’A’和’A’
在python 3中
b’A’是ascii編碼的01010101的字節(jié),占1個byte;
'A‘是在內(nèi)存里按unicode形式編碼的/ucc,占的是2個byte。
unicode編碼后是bytes,如果這個字節(jié)范圍不在ascii的表示范圍內(nèi),就會顯示成\x(十六進制形式)
例如:
- 漢字編碼成bytes,去查看這個bytes肯定只能看到\x系列,因為這個bytes的內(nèi)容肯定不在ascii范圍內(nèi);
- 英文編碼成bytes可以看到對應的英文字母,本質(zhì)上它還是沒有含義的010101的字節(jié)流而不是字符。
"abc".encode('utf-8')
b'abc'
'中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
1個漢字,按utf-8編碼,一般是3個bytes,\xe4是十六進制表示的1個byte。相同的英文字符,ascii編碼和utf-8編碼的結(jié)果是一致的,因為這兩種編碼都使用一個byte表示一個英文字符
'abc'.encode('ascii').decode('utf-8')
'abc'可以用一個編碼然后再另一個解碼,是可以成功還原的。但一般是不會這么做的。
ord函數(shù)獲取字符的整數(shù)表示和chr數(shù)把編碼轉(zhuǎn)換為對應的字符
?ord('A')
65
ord('中')
20013
chr(66)
'B'
chr(25991)
'文'對str和對bytes用len,意義是不同的。
len(str)統(tǒng)計字符數(shù),len(bytes)統(tǒng)計bytes數(shù)
>>> len('中文')
2
?len(str)統(tǒng)計字符數(shù)
>>> bt1 = '中文'.encode('gb2312')
>>> bt2 = '中文'.encode('utf-8')
>>> bt1
b'\xd6\xd0\xce\xc4'
>>> bt2
b'\xe4\xb8\xad\xe6\x96\x87'
>>> len(bt1)
4
>>> len(bt2)
6以Unicode表示的str通過encode()方法可以編碼為指定的bytes
python解析 \x 和 \u "亂碼"
參數(shù)錯誤
\xe5\x8f\x82\xe6\x95\xb0\xe6\x9c\x89\xe8\xaf\xaf ?
今日已經(jīng)完成過此任務,請明日再做此任務吧!
\u4eca\u65e5\u5df2\u7ecf\u5b8c\u6210\u8fc7\u6b64\u4efb\u52a1\uff0c\u8bf7\u660e\u65e5\u518d\u505a\u6b64\u4efb\u52a1\u5427!
python2.7解析方法
>>> print(u'\xe5\x8f\x82\xe6\x95\xb0\xe6\x9c\x89\xe8\xaf\xaf ?'.encode('unicode_escape').decode('string_escape'))?
>>>print('\u4eca\u65e5\u5df2\u7ecf\u5b8c\u6210\u8fc7\u6b64\u4efb\u52a1\uff0c\u8bf7\u660e\u65e5\u518d\u505a\u6b64\u4efb\u52a1\u5427!'.decode('unicode_escape'))python3解析方法
>>>('\xe5\x8f\x82\xe6\x95\xb0\xe6\x9c\x89\xe8\xaf\xaf ?'.encode('raw_unicode_escape')).decode()
>>>'\u4eca\u65e5\u5df2\u7ecf\u5b8c\u6210\u8fc7\u6b64\u4efb\u52a1\uff0c\u8bf7\u660e\u65e5\u518d\u505a\u6b64\u4efb\u52a1\u5427!'以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python2和Python3中@abstractmethod使用方法
這篇文章主要介紹了Python2和Python3中@abstractmethod使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-02-02
Python從入門到實戰(zhàn)之數(shù)據(jù)結(jié)構(gòu)篇
數(shù)據(jù)結(jié)構(gòu)中有很多樹的結(jié)構(gòu),其中包括二叉樹、二叉搜索樹、2-3樹、紅黑樹等等。本文中對數(shù)據(jù)結(jié)構(gòu)進行了總結(jié),不求嚴格精準,但求簡單易懂2021-11-11

