Python中常用的文本转义及编码
每種語(yǔ)言都有其關(guān)鍵字和保留字符,這樣為了能這些特殊字符能正常顯示,就需要轉(zhuǎn)義,如Python中\(zhòng)n代表回車,HTML中 代表空格等等。
Python中的’‘是轉(zhuǎn)義控制符,如果要表達(dá)\本身則需要使用’’,常見于Windows系統(tǒng)的路徑中(使用’/'則不需要轉(zhuǎn)義)。
unicode轉(zhuǎn)義
有時(shí)候我們?cè)陧憫?yīng)文本中會(huì)看到一些\u開頭的字符串,如下例。
>>> import requests >>> res = requests.get('https://httpbin.org/get?name=張三&age=12') >>> print(res.text) {"args": {"age": "12","name": "\u5f20\u4e09"},"headers": {"Accept": "*/*","Accept-Encoding": "gzip, deflate","Host": "httpbin.org","User-Agent": "python-requests/2.24.0","X-Amzn-Trace-Id": "Root=1-5f8f8e42-6d1f34a2691b8bec579454a3"},"origin": "111.194.126.253","url": "https://httpbin.org/get?name=\u5f20\u4e09&age=12" }響應(yīng)體文本中,name后面對(duì)應(yīng)是"\u5f20\u4e09",這是HTTP請(qǐng)求在傳輸時(shí)為了確保符合ASCII編碼對(duì)其他字符集做的unicode轉(zhuǎn)義。
注意這個(gè)只是打印結(jié)果,我們看看res.text的本來(lái)樣子。
>>> res.text '{\n "args": {\n "age": "12", \n "name": "\\u5f20\\u4e09"\n }, \n "headers": {\n "Accept": "*/*", \n "Accept-Encoding": "gzip, deflate", \n "Host": "httpbin.org", \n "User-Agent": "python-requests/2.24.0", \n "X-Amzn-Trace-Id": "Root=1-5f8f8e42-6d1f34a2691b8bec579454a3"\n }, \n "origin": "111.194.126.253", \n "url": "https://httpbin.org/get?name=\\u5f20\\u4e09&age=12"\n}\n'可以看出name的實(shí)際值是"\u5f20\u4e09","\u5f20\u4e09" != “\u5f20\u4e09”,看下如下例子。
>>> name = "\u5f20\u4e09" >>> name '張三' >>> name = "\\u5f20\\u4e09" >>> name '\\u5f20\\u4e09' >>> print(name) \u5f20\u4e09可見 “\u5f20\u4e09” 就是"張三",而"\u5f20\u4e09"是一個(gè)顯示為"\u5f20\u4e09"的字符串。
unicode轉(zhuǎn)義-解碼
如何將"\u5f20\u4e09"轉(zhuǎn)為"張三"呢?方法如下
先按utf-8編碼回二進(jìn)制,然后按unicode-escape方式解碼為正常文本
unicode轉(zhuǎn)義-編碼
如果想將"張三"轉(zhuǎn)為unicode轉(zhuǎn)義字符只需要反向操作即可。
>>> name = "張三" >>> name.encode('unicode-escape').decode('utf-8') '\\u5f20\\u4e09'GBK轉(zhuǎn)義
有些中文網(wǎng)頁(yè)中有時(shí)會(huì)使用GBK編碼,形式為\x開頭的字符如。
>>> name = "張三" >>> name.encode('gbk') b'\xd5\xc5\xc8\xfd'這個(gè)二進(jìn)制字符串b’\xd5\xc5\xc8\xfd’就是"張三",但如果我們拿到一個(gè)"\xd5\xc5\xc8\xfd"的普遍字符串呢?
操作方法如下。
無(wú)論是"\xd5\xc5\xc8\xfd"還是"\xd5\xc5\xc8\xfd"都可以。
html轉(zhuǎn)義
在有些情況下我們需要解碼html文檔中的轉(zhuǎn)義字符,或者進(jìn)行編碼,操作如下。
>>> import html >>> args='{"e": 5, "f": 6}' >>> html.escape(args) # 轉(zhuǎn)義 '{"e": 5, "f": 6}' >>> html.unescape('{"e": 5, "f": 6}') # 轉(zhuǎn)回 '{"e": 5, "f": 6}'url編碼
在url中需要對(duì)一些特殊字符進(jìn)行編碼,比如在瀏覽器地址欄中輸入https://httpbin.org/get?name=張三&age=12’
然后復(fù)制-粘貼,你會(huì)發(fā)現(xiàn)網(wǎng)址變?yōu)榱薶ttps://httpbin.org/get?name=%E5%BC%A0%E4%B8%89&age=12,這就是url為確保ASCII對(duì)特殊字符集非ASCII編碼進(jìn)行的編碼。
如何解碼呢?方法如下。
>>> from urllib.parse import quote,unquote,urlencode >>> url = 'https://httpbin.org/get?name=%E5%BC%A0%E4%B8%89&age=12' >>> unquote(url) 'https://httpbin.org/get?name=張三&age=12'如果想要進(jìn)行urlencode編碼,則需要使用quote和urlencode,quote對(duì)字符串進(jìn)行編碼,一般只用于單個(gè)參數(shù)值,urlencode則對(duì)一組字典格式的參數(shù)進(jìn)行編碼組裝。
示例如下:
或
>>> params = {"name": "張三", "age": 12} >>> urlencode(params) 'name=%E5%BC%A0%E4%B8%89&age=12' >>> url = f'https://httpbin.org/get?{urlencode(params)}' >>> url 'https://httpbin.org/get?name=%E5%BC%A0%E4%B8%89&age=12'base64編碼
編碼和加密的不同在于,編碼一般為了傳輸或者壓縮,支持解碼。加密后則一般不能反解。
base64一般用于在接口中,將圖片或媒體變?yōu)橐环N固定長(zhǎng)度的字符串形式,方便傳輸。
base64編碼解碼方法如下。
編碼
解碼
>>> base64.b64decode('bHRz').decode('utf-8') 'lts' >>> base64.b64decode(b'bHRz').decode('utf-8') 'lts' >>>總結(jié)
以上是生活随笔為你收集整理的Python中常用的文本转义及编码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基础入门:高效的集合操作
- 下一篇: Python基础入门:*和**的使用教程