python2.7编码
来源:互联网 发布:人工智能李开复百度云 编辑:程序博客网 时间:2024/06/10 16:03
今天认真研究了一下字符编码相关的知识。
- python2,7内部用的是Unicode,与其它编码之间的切换都要以Unicode为桥梁
- str是使用魔种字符集编码的字符串,与unicode不同,可以用type查看
- python默认的encoding是ascii
- 脚本头部# coding=utf8这样的声明可以设置默认字符集,设置了之后在脚本中的str就会使用指定的字符集
python2.7中自带的json模块
- 首先是dump和dumps,这两个方法中都有ensure_ascii和encoding参数。
encoding指的是要序列化的对象中的str类型的值的字符集,默认是utf-8,需要注意的是这个参数并不是用于指定输出json字符串的字符集,具体见ensure_ascii参数的解释。
ensure_ascii是True指输出的字符串是否全部使用ascii字符,非ascii字符将会以“\uXXXX“形式的字符串输出,其中“XXXX”是该字符在unicode字符集中的值的十六进制表示,比如“现代城”就是 "\u73b0\u4ee3\u57ce",这种情况下可以保证所有字符都能通过ascii字符表示,但是会存在一个风险,就是反序列化时候必须要知道要把\uXXXX“形式的字符串作为一个unicode字符处理,否则可能出现错误。这种情况下需要使用encoding指定的字符集将非ascii字符dncode得到unicode字符。
ensure_ascii是False指直接输出每个字符按照其当前所属的字符集中对应的值,这总情况下print序列化得到的json字符串可以直接看到字符本身。这种情况下不需要encoding,因为并不涉及字符的编码转换。需要注意的是需要序列化的对象中的str需要使用同一种字符集,如果字符集不同,那么序列化时候没问题,但是反序列化时候会出问题,见下文 - 其次是load和loads。这两个方法中都有encoding参数。
这两个方法反序列化得到的对象中只要是用到字符串的地方统一是unicode,而不是str。
encoding参数作用是说明参与反序列化的json字符串使用的字符集,而不是反序列化得到的对象中的str的字符集。
正是需要通过这个字符集将字符转换为unicode,因此在序列化时候要保证对象中的str使用同一种字符集,否则反序列化时候只能指定一种字符集就会出现问题。
按照代码中的注释,encoding必须是an ASCII based encoding,我的理解是兼容ascii的字符集,not ASCII based encoding are not allowed,给出的例子是(such as UCS-2) ,但是我搜了一下发现UCS-2是指用两个字节表示一个unicode字符的值,这就比较懵逼了,希望有大神赐教,不胜感激
阅读全文
0 0
- Python2.7 编码问题
- Python2.7 字符编码
- Python2.7<中文编码>
- python2.7编码
- Python2.7编码问题
- python2.7中文编码
- python2.7编码
- python2.7 编码问题
- python2.7编码问题
- python2.7--字符串和编码
- python2.7编码的问题
- python2.7中的编码问题
- Python2.7字符编码详解
- Python2 编码
- python2.7:文件编码检测chardet 详解
- mac下设置python2.7编码格式
- Python2.7 编码与解码理解
- python2.7 编码问题解析(一)
- 学习笔记1之static
- 事件分发
- 虚拟货币开发专题(什么是去中心化的点对点)
- Python [os.path] 路径
- python读取excel
- python2.7编码
- 浅谈<photo.h>框架
- 设计模式基础(一)
- zabbix 安装
- 进程学习(2)
- Java|Java绘制制作简易计算器
- 【Java学习笔记】22.Java的反射机制
- 51nod 1639 绑鞋带
- 渗透之信息收集