python中的編碼和解碼及\x和\u問題
編碼和解碼及\x和\u問題
“字符在內(nèi)存里的表示是unicode,如果要存盤或者發(fā)到網(wǎng)絡(luò)就經(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可以看到對應(yīng)的英文字母,本質(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)換為對應(yīng)的字符
?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)完成過此任務(wù),請明日再做此任務(wù)吧!
\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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python中的yeild關(guān)鍵字提高代碼執(zhí)行效率場景實例探究
在Python編程語言中,yeild是一個非常實用的關(guān)鍵字,它不僅可以幫助你編寫更加簡潔的代碼,還可以提高代碼的執(zhí)行效率,本文將詳細介紹yeild在Python中的使用方法,并通過示例代碼進行演示,讓我們一起來探索這個強大的關(guān)鍵字吧2024-01-01python虛擬環(huán)境virtualenv的安裝與使用
virtualenv用于創(chuàng)建獨立的Python環(huán)境,多個Python相互獨立,互不影響,它能夠:1. 在沒有權(quán)限的情況下安裝新套件 2. 不同應(yīng)用可以使用不同的套件版本 3. 套件升級不影響其他應(yīng)用2017-09-09Python Pymysql實現(xiàn)數(shù)據(jù)存儲的示例
本文主要介紹了Python Pymysql實現(xiàn)數(shù)據(jù)存儲的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03關(guān)于spring的@Bean注解放入引用Bean中初始化失敗分析
這篇文章主要介紹了關(guān)于spring的@Bean注解放入引用Bean中初始化失敗分析,Spring的@Bean注解用于告訴方法,產(chǎn)生一個Bean對象,然后這個Bean對象交給Spring管理,產(chǎn)生這個Bean對象的方法Spring只會調(diào)用一次,需要的朋友可以參考下2023-07-07