一. 基本知识
1. 如果py文件里面不指定源文件需要用到的编码格式的话,python解析器就会用默认的编码去解析,一般是ASCII, 所以如果此时源文件有中文的话就会报错,‘SyntaxError: Non-ASCII character......’, 因此一定要显示指定编码格式,方法是在py文件第二行加入此句:' #-*- coding: gbk -*-' , 就指定编码格式为gbk了。当然写法上还可以是满足这样的正则表达式的句子: 'coding[:=]\s*([-\w.]+)'
注意: 一般声明的coding要和文件编码一致,这样最稳妥!
2. python中 s = ‘中文' 和 s = u'中文'的区别:
s = '中文' 要变成python解析器识别的unicode,那就要在运行时才能。因为解析器会在运行时把s变量decode成unicode。
而s = u'中文'则是在编译的时候就变成unicode了,并且会保存在对应的pyc文件中。
所以两者的区别其实就是什么时候变成unicode,而且作为参数传递时有u的直接就是unicode对象了,而没有u的只是python中的普通的str, 需要变成unicode来用时需要调用decode或者unicode函数来处理。两者的联系就是他们的最终结果都是unicode。
3. 文件的编码
3.1 在编码问题中,其实文件本身的编码也是很重要的。如何查看?用vim的话,可以通过在vimrc文件加入'set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1' 来检测文件的编码格式,会按照你列的编码顺序来检测该文件的编码。具体做法是加入那句以后,用vim打开该文件后,用set fileencoding来查看。
3.2 文件的编码其实就决定了你在文件中写一句 s = '中文'的时候,这个s的值是什么编码。也就是说,如果文件编码是gbk,那么s就是gbk编码,你要变成unicode来用就要s.decode('gbk').
4. python文件中的中文有人是建议都用u'xx'的写法变成unicode,然后在需要转换显示的时候才转,我表示同意。
二. python解析源文件的流程
流程图 reference : http://www.python.org/dev/peps/pep-0263/
三. 遇到的问题
遇到的问题的例子比较多,这里不一一列举了,找了几个比较好的参考资料
1. http://zzjjzzgggg.iteye.com/blog/311666
2. http://zzjjzzgggg.iteye.com/blog/309409
3. http://www.iteye.com/topic/560229
4. http://www.iteye.com/topic/699510
5. 用simplejson 来转换数据:
simplejson提供两类API:
1) loads: 将python的object转化成字符串(<type: 'str'>)
2) dumps : 将字符串转化成python的object.
loads明显是有个encode的过程, 那么肯定有个encoding来指定encode时候的编码, 不指定默认是用utf-8的;
同样dumps明显就有个decode过程, 同样有个encoding来指定, 默认也是为utf-8;
以前遇到一个问题是, 通过http接口获取过来的json数据编码是gbk的, 但是我在loads的时候没有指定encoding,
结果出现乱码, 找了很久才发现了问题, 所以我警惕之后调用这2个接口的时候都最好显示指定encoding,这样
虽然麻烦了, 但是对于查找问题和代码可读性方面都是有好处的!
经验是如果遇到编码问题,可以从一下几个方面去思考:
1)文件本身的 编码
2)声明的编码
3)如果数据是从网络获取的或者其他途径,反正就不是自己的,那么建议代码中加入try...except UnicodeEncodeError, UnicodeDecodeError 之类的代码做好防范。
4)建议采用utf-8编码,如果实在是对数据量有要求的可以用gbk,因为小一点。
欢迎拍砖!
- 描述: python 解析器分析编码的流程图
- 大小: 155.2 KB
分享到:
相关推荐
本文详细总结了python编码。分享给大家供大家参考,具体如下: 【所谓unicode】 unicode是一种类似于符号集的抽象编码,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。也就是它只是一种内部...
1.2 Python 编码风格方面的准则 2. Python 语言方面的准则 2.1 pychecker 2.2 导入模块和包 2.3 完整路径导入 2.4 异常处理 2.5 全局变量 2.6 内嵌/本地/内部类和函数 2.7 List Comprehensions 2.8 默认迭代器和...
参照https://legacy.python.org/dev/peps/pep-0008/官方文档简单总结了python编程过程中应当遵守的编码规范,比如函数的命名、变量的命名等(PEP8编码规范)。
总结Python基础面试题全文共6页,当前为第1页。总结Python基础面试题全文共6页,当前为第1页。总结Python基础面试题 总结Python基础面试题全文共6页,当前为第1页。 总结Python基础面试题全文共6页,当前为第1页。 1...
python编码最佳实践之总结,帮助大家整理了python编码最佳实践的相关知识点,重点从性能角度出发对python的一些惯用法做一个简单总结,感兴趣的小伙伴们可以参考一下
python装饰器是一个用于封装函数、...本文首先探讨了实现装饰方法的类装饰器应具有的基本结构,接着对通用的两种编码模型进行了语法和流程的深入分析,并总结了各自的特点,为编写类装饰器装饰方法提供扎实的理论基础。
主要给大家介绍了Python2与Python3关于字符串编码处理差别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
python中有很多常用的装饰器,遵循开闭 原则对项目进行扩展。一篇搞定python装饰器。 提升python编码水平必须学习的知识点。
Python-三叉树实现三元huffman编码前言什么是huffman编码举个栗子话不多说,直接上代码运行结果截图关于为什么要取余的问题最后参考帖子 前言 上信息论的课,讲到了huffman编码,然后这章的实验内容,就是实现一个...
Python程序设计的书籍已经琳琅满目,每一本书都凝聚了作者对Python的理解和对程序设计的认识,都是作者编程开发和教学经验的总结,都折射出作者的专业背景。由于大数据专业学生对程序设计的要求不是很高,但又需要...
python编码需要顶格编程 python 注释是#号 # 注释内容,#号后⾯有空格 第 2 课 变量与赋值 变量名只能由字母、数字、下划线组成。 1. 不以数字开头 2. ⼤⼩写敏感 格式化输出: name = "Tony" print(f"My name is {...
Python程序设计的书籍已经琳琅满目,每一本书都凝聚了作者对Python的理解和对程序设计的认识,都是作者编程开发和教学经验的总结,都折射出作者的专业背景。由于大数据专业学生对程序设计的要求不是很高,但又需要...
Python基础 1. 软件安装(Notepad++、Pycharm(后续再用,开始先用notepad++)) 2. 第一个hello world程序 print("HelloWorld!")#打印hello world 注:命名规则: 1. 字母数字下划线组成 2. 不能以数字开头,不能...
简明Python代码规范 一、 执行 二、 编码 三、 注释 四、 格式 1. 缩进 2. 空格 3. 空行 4. 断行 五、 命名 1. 常量 2. 变量 3. 函数 4. 类 5. 模块 6. 包 7. 缩写 8. 特定命名方式 六、 语句 1. import 2. 赋值 3. ...
写这篇文章的缘由是我使用 ... 这篇文章虽然是 json.dumps 问题的总结, 但也会涉及到 字符编码 问题, 所以就简单先说一下 字符编码. Python 中的字符编码 在 Python3 中, 字符 在内存中是使用 Unicode 存储的, 常规的
本文实例讲述了python使用chardet判断字符串编码的方法。分享给大家供大家参考。具体分析如下: 最近利用python抓取一些网上的数据,遇到了编码的问题。非常头痛,总结一下用到的解决方案。 linux中vim下查看文件...
用python2的小伙伴肯定会遇到字符编码的问题。下面对编码问题做个简单的总结,希望对各位有些帮助。 故事零:编码的定义 我们从“SOS“(国际通用求助信号)开始,它的摩斯密码的编码是: “…—…”,想一下为...
data:附加参数(from表数据),bytes字节流格式,如果是字典型(dict),先用urllib.parse.urlencode()编码。 headers:请求头,字典类型,可以构造请求时直接通过headers参数构造,或通过add_header() 3)response:...