python的格式轉換太難了。
與其說是難,具體來說應該是「每次都會忘記該怎麼處理」。所以於此記錄,總的來說是編碼+格式轉換的記錄。
經常見到的格式轉換:
bytes-str
socket、網路通訊和**的很多資料傳輸,都是使用bytes格式在傳送訊息,而同時很多時候我們也需要把這些資訊程式設計str來試著人工讀資訊。
此時使用方法:decode([編碼格式])來完成bytes到str的轉換,而str的貨真價實的編碼就是utf-8、gbk等等。
str-bytes
反過來,要把對人友好的字串等轉化到對機器友好的位元組流,用encode()方法來完成。
bytes-十六進製制數
我們通常更常用的其實是字串轉十六進製制,但bytes作為橋梁更簡單,只要組合一下就行了。
python3需要使用庫binascii來完成很多這類在python2中可直接進行的轉換,bytes轉為十六進製制數字文字,只需要使用binascii.b2a_hex()即可,具體更多用法可以在python的cmd模式下使用help(binascii)檢視。
然後就可以拿這個十六進製制數文字去加密或者其它處理。
十六進製制數-bytes
反過來使用binascii.a2b_hex()即可。
bytes的base64編碼/解碼
很多**會進一步把一些資訊用base64的方式傳輸,有的為了節約資源,有的為了讓ascii無法顯示的亂碼不至於被錯誤處理而產生誤差,總之base64是好東西。
python3自帶base64庫,import base64後,使用base64.b64encode()或base64.b64decode()來對bytes型量進行base64編碼或解碼。
一些天坑的東西
1. python開啟檔案的編碼格式
python開啟檔案很簡單,常用的比如open(),with open as之類,然而有時候會出些小問題,比如txt檔案,windows寫入和讀取txt預設都是unicode的方式(畢竟,沒記錯的話open這類函式是靠作業系統提供的中斷函式完成的),這時候,如果要寫入的文字是utf-8編碼的,就有可能報錯,有時候不報錯,但是會產生亂碼。(特別是用爬蟲爬些稀奇古怪的**的源**時候,寫入檔案很容易變成亂碼。)
所以要設定open()的編碼,在最後加上,encoding="utf-8"。可以看到成功寫入10個字元。
2.request.get時候的編碼
寫爬蟲的時候,有時候需要獲取當前網頁的源**然後進行一些其他操作,比如找其它頁面,對於一些能用偏靜態手段處理的網頁,request庫仍然是最合適的選擇,使用result=request.get(html)得到目標網頁的應答資訊,要檢視源**時,有兩種方式:一是result.text,一種是result.content。這兩種的區別在於,result.text會自動對網頁應答進行unicode編碼,這極有可能導致資訊錯誤或亂碼,而result.content則直接返回網頁應答的bytes型別資訊。在必要情況下,就算是要得到網頁某部分的文字,也應該用content獲取原始bytes資訊再自行轉為utf-8等編碼文本來使用。
js 日期轉換格式
var starttime 2009 08 07 var endtime 2009 08 08 var starttimedatetemp starttime.replace w s s w s w 2 3 1 var endtimedatetemp endtime.replace w s s w ...
SQL Server 日期轉換格式
sql server中文版的預設的日期欄位datetime格式是yyyy mm dd thh mm ss.mmm 例如 select getdate 2004 09 12 11 06 08.177 這對於在要不同資料庫間轉移資料或者習慣日期格式yyyy mm dd hh24 mi ss的人多少有些不...
PEM格式的證書轉換格式
轉換格式方式也有很多種,最為簡單直接的辦法直接用linux自帶的openssl軟體直接轉換。常用格式轉換 certificates formats 方式。我們在準備轉換格式之前,需要找一台linux vps,且已經安裝openssl軟體的,如果沒有安裝,自行安裝。第一 pem 轉 pkcs7 ope...