相信编码问题困扰了不少coder,最近遇到的一些坑分享给大家。

1、通用方法 :decode对应的编码

>>>b"abcde"b'abcde'#utf-8isusedherebecauseitisaverycommonencoding,butyou#needtousetheencodingyourdataisactuallyin.>>>b"abcde".decode("utf-8")'abcde'

2、正反编码:encode完了decode

importurllib.request#urlurl="http://www.baidu.com/"#请求request=urllib.request.Request(url)#爬取结果response=urllib.request.urlopen(request)s=response.read()s=s.decode('utf-8')s=s.encode('gbk','ignore').decode('gbk');print(s)input('...')

3、文件流的方式

针对文件的存储,如图片、音乐,需要以文件为载体作为读写

defread_file(filename):withopen(filename,'rb')asf:photo=f.read()returnphoto

4、Binary/LargeBinary/BLOB 字节流类读写

这个时候就要用到我们的终极武器,pickle模块。以上的方法针对特殊字符的字符串格式的读取是invalid byte。

insert=self.jobs_t.insert().values(**{'id':job.id,'next_run_time':datetime_to_utc_timestamp(job.next_run_time),'job_state':pickle.dumps(job.__getstate__(),self.pickle_protocol)#write})res[APSchedulerJob.id]={'next_run_time':APSchedulerJob.next_run_time,'job_state':str(pickle.loads(APSchedulerJob.job_state)),}#read结果:{"dbintobalant":{"job_state":"{'version':1,'id':'dbintobalant','func':'app.main.views:db_balant','trigger':<CronTrigger(day_of_week='mon-sun',hour='*',minute='*/4',second='0',timezone='Asia/Shanghai')>,'executor':'default','args':(),'kwargs':{},'name':'dbintobalant','misfire_grace_time':1,'coalesce':False,'max_instances':5,'next_run_time':datetime.datetime(2018,6,22,14,8,tzinfo=<DstTzInfo'Asia/Shanghai'CST+8:00:00STD>)}","next_run_time":1529647680.0},"hwintobalant":{"job_state":"{'version':1,'id':'hwintobalant','func':'app.main.views:hw_balant','trigger':<CronTrigger(day_of_week='mon-sun',hour='*',minute='*/3',second='0',timezone='Asia/Shanghai')>,'executor':'default','args':(),'kwargs':{},'name':'hwintobalant','misfire_grace_time':1,'coalesce':False,'max_instances':5,'next_run_time':datetime.datetime(2018,6,22,14,9,tzinfo=<DstTzInfo'Asia/Shanghai'CST+8:00:00STD>)}","next_run_time":1529647740.0},"mwintobalant":{"job_state":"{'version':1,'id':'mwintobalant','func':'app.main.views:mw_balant','trigger':<CronTrigger(day_of_week='mon-sun',hour='*',minute='*/2',second='0',timezone='Asia/Shanghai')>,'executor':'default','args':(),'kwargs':{},'name':'mwintobalant','misfire_grace_time':1,'coalesce':False,'max_instances':5,'next_run_time':datetime.datetime(2018,6,22,14,8,tzinfo=<DstTzInfo'Asia/Shanghai'CST+8:00:00STD>)}","next_run_time":1529647680.0}}

如有其他好的方法,欢迎交流。