欢迎来到天天文库
浏览记录
ID:8406551
大小:347.50 KB
页数:17页
时间:2018-03-20
《谈谈Python编码问题和Unicode》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、谈谈Python编码问题和Unicodetaochunhua@tencentoutlineUnicode基础知识Python的str和unicodeJson编码工具实例UnicodeAscii时代7位,最高位是校验位MBCS时代(多字节字符集)中文CP963,GBK,GB2312,BIG5UnicodeUnicode16,Unicode32题外话:存在与表示BigEndian&LittleEndianSPARK,x86,ARMHostByteOrder&NetworkByteOrderhtonl
2、,ntohl,htons,ntohsObjectPersistence&SerializeMFC,javaserialiableinterfaceandpersistenceapi,protobufUnicode&UTF,UCSSeveralmechanismshavebeenspecifiedforimplementingUnicode.unicode&utfunicodeunicode16,unicode32UnicodeTransformationFormat(UTF)UTF16(Big/
3、LittleEndian)UTF32(Big/LittleEndian)UTF8变长方案思考?为什么是变长的?如何实现?Pythonstr&unicodestr对象存储ascii字符串,以及二进制数据unicode对象存储unicode字符串,采用的是utf16或utf32str用来存储各种utf数据,包括gbk等可以认为:unicode对象是理想的unicode,str是丑陋的现实(各种utf)str与unicode的转化使用时机拇指定律IO时用stre.g.network,filereadw
4、rite内部处理时用unicodejsonencode,stringprocess例子从外部读入时它是str转为unicode进行必要处理再转为str输出demo体验demo.pyimportjson我懂了上面说的,为什么json还是搞不定?嗯,因为json帮你encode,decode了一些东西需要仔细阅读json模块的文档json.dumps(obj,ensure_ascii,encoding...)objpython数据结构:dic,list...ensure_ascii=True(def
5、ault)dumps返回一个strensure_ascii=Falsedumps返回一个unicode!我们可以进一步对它encodeencoding在obj进行转化之前,所有obj中的str会转为unicode,即str.decode(encoding)默认情况:str->unicode->json(unicode)->str一个默认处理json.dumps(d,encoding='gbk')它返回一个strstr->unicode->json(unicode)->strstr->unicod
6、e的decode在encoding参数控制json(unicode)->str这里的encoding是默认控制的!这个默认控制不是encode,而是直接把unicode转义为ascii编码,这个ascii码的内容是unicode!这里应该是个utf8,这个过程是个硬编码:见lib中encode.py证据老白干酒utf8:0x80010x767D0x5E720x9152gbk:0xC0CF0xB0D70xB8C90xBEC6JSON本身的规范和实现有了以上知识,我们还有可能搞不定特定需求:比如,请
7、给我弄个GKB的字符串!JSON规范定义string必须是unicode字符串,但是实现形式默认是utf8有些json解析函数仅实现了utf8,不支持其他格式!实例后台程序写入数据到redis实例redis中数据实例php接口
此文档下载收益归作者所有