`
jianpx
  • 浏览: 169428 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

python 编码总结

阅读更多

一. 基本知识

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编码总结(编码类型、格式、转码)

    本文详细总结了python编码。分享给大家供大家参考,具体如下: 【所谓unicode】 unicode是一种类似于符号集的抽象编码,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。也就是它只是一种内部...

    Python编码风格指南(中文版)

    1.2 Python 编码风格方面的准则 2. Python 语言方面的准则 2.1 pychecker 2.2 导入模块和包 2.3 完整路径导入 2.4 异常处理 2.5 全局变量 2.6 内嵌/本地/内部类和函数 2.7 List Comprehensions 2.8 默认迭代器和...

    python PEP8 编码规范总结

    参照https://legacy.python.org/dev/peps/pep-0008/官方文档简单总结了python编程过程中应当遵守的编码规范,比如函数的命名、变量的命名等(PEP8编码规范)。

    总结Python基础面试题.docx

    总结Python基础面试题全文共6页,当前为第1页。总结Python基础面试题全文共6页,当前为第1页。总结Python基础面试题 总结Python基础面试题全文共6页,当前为第1页。 总结Python基础面试题全文共6页,当前为第1页。 1...

    python编码最佳实践之总结

    python编码最佳实践之总结,帮助大家整理了python编码最佳实践的相关知识点,重点从性能角度出发对python的一些惯用法做一个简单总结,感兴趣的小伙伴们可以参考一下

    python类装饰器装饰方法通用编码模型分析.pdf

    python装饰器是一个用于封装函数、...本文首先探讨了实现装饰方法的类装饰器应具有的基本结构,接着对通用的两种编码模型进行了语法和流程的深入分析,并总结了各自的特点,为编写类装饰器装饰方法提供扎实的理论基础。

    Python2与Python3关于字符串编码处理的差别总结

    主要给大家介绍了Python2与Python3关于字符串编码处理差别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    python的常用装饰器总结

    python中有很多常用的装饰器,遵循开闭 原则对项目进行扩展。一篇搞定python装饰器。 提升python编码水平必须学习的知识点。

    python三叉树实现三元huffman编码

    Python-三叉树实现三元huffman编码前言什么是huffman编码举个栗子话不多说,直接上代码运行结果截图关于为什么要取余的问题最后参考帖子 前言 上信息论的课,讲到了huffman编码,然后这章的实验内容,就是实现一个...

    Python语言程序设计PPT课件.zip

    Python程序设计的书籍已经琳琅满目,每一本书都凝聚了作者对Python的理解和对程序设计的认识,都是作者编程开发和教学经验的总结,都折射出作者的专业背景。由于大数据专业学生对程序设计的要求不是很高,但又需要...

    夜曲编程Python入门课程Pro.pdf

    python编码需要顶格编程 python 注释是#号 # 注释内容,#号后⾯有空格 第 2 课 变量与赋值 变量名只能由字母、数字、下划线组成。 1. 不以数字开头 2. ⼤⼩写敏感 格式化输出: name = "Tony" print(f"My name is {...

    Python语言程序设计习题答案.zip

    Python程序设计的书籍已经琳琅满目,每一本书都凝聚了作者对Python的理解和对程序设计的认识,都是作者编程开发和教学经验的总结,都折射出作者的专业背景。由于大数据专业学生对程序设计的要求不是很高,但又需要...

    Python基础01-03总结

    Python基础 1. 软件安装(Notepad++、Pycharm(后续再用,开始先用notepad++)) 2. 第一个hello world程序 print("HelloWorld!")#打印hello world 注:命名规则: 1. 字母数字下划线组成 2. 不能以数字开头,不能...

    简明Python代码规范 Python编程规范 Python开发代码规范与标准 Python编程开发习惯 共13页.pdf

    简明Python代码规范 一、 执行 二、 编码 三、 注释 四、 格式 1. 缩进 2. 空格 3. 空行 4. 断行 五、 命名 1. 常量 2. 变量 3. 函数 4. 类 5. 模块 6. 包 7. 缩写 8. 特定命名方式 六、 语句 1. import 2. 赋值 3. ...

    详解Python在使用JSON时需要注意的编码问题

    写这篇文章的缘由是我使用 ... 这篇文章虽然是 json.dumps 问题的总结, 但也会涉及到 字符编码 问题, 所以就简单先说一下 字符编码. Python 中的字符编码 在 Python3 中, 字符 在内存中是使用 Unicode 存储的, 常规的

    python使用chardet判断字符串编码的方法

    本文实例讲述了python使用chardet判断字符串编码的方法。分享给大家供大家参考。具体分析如下: 最近利用python抓取一些网上的数据,遇到了编码的问题。非常头痛,总结一下用到的解决方案。 linux中vim下查看文件...

    python与字符编码问题

    用python2的小伙伴肯定会遇到字符编码的问题。下面对编码问题做个简单的总结,希望对各位有些帮助。 故事零:编码的定义 我们从“SOS“(国际通用求助信号)开始,它的摩斯密码的编码是: “…—…”,想一下为...

    python爬虫课程要点.docx

    data:附加参数(from表数据),bytes字节流格式,如果是字典型(dict),先用urllib.parse.urlencode()编码。 headers:请求头,字典类型,可以构造请求时直接通过headers参数构造,或通过add_header() 3)response:...

Global site tag (gtag.js) - Google Analytics