1、Python文件的编码

在Python文件中,可以在第一或第二行指定文件的编码格式(以注释的形式加),这也是Python语法规定的,见http://www.python.org/peps/pep-0263.html。比如用utf8格式存储文件,就要加# -*- coding:gbk -*-   或 # coding = gbk,其中,# -*- coding:gbk -*-这种格式是很多流行的文本编辑器都支持的,此处我使用的是Eclipse+Pydev。指定文件编码格式有两个作用:一是告诉文本编辑器要用指定的编码存储文件;二是告诉Python语法分析器以哪种编码格式来读取分析文件。一个是写入,一个是读取,编码和解码要一致才行。如果没有写上面的‘指定编码行’,那编码和解码就用默认值,文本编辑器的默认文件的编码可以自己修改,Python语法分析器默认用ASCII码解析文件,ASCII码范围是0~127,这样,当文件的某个字节的值大于127时,就会出错,如下。

test.py文件:

a = '你'

print a

当调试时,语法分析器检查出错误,SyntaxError: Non-ASCII character '\xc4' in file E:\test.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details。

我的eclips的默认编码是GBK,'你'的GBK编码是c4e3,查看test.py的二进制代码,的确如此。c4>127,ASCII码表中没有对应的字符,就报错了。

因此,对于有非ASCII字符的代码文件,第一行或第二行一定要指定编码格式,建议使用utf-8编码,这种编码格式非常通用。即# -*- coding:utf-8 -*-

1、Python文件的编码

Python2.7中字符串有两个类型:string类型、unicode类型。比如

test2.py文件:

# -*- coding:utf-8 -*-

a = '你'

b = u'你'

a是string类型,b是unicode类型,与文件的编码格式有什么关系呢?OK,test2.py是以utf-8编码后保存的,同一个文件中所有字符的编码格式都是一样的,不可能说a以utf8保存,而b以unicode保存(ucs2或ucs4)。当运行代码时,Python语法分析器会先检查语法,没有问题后,再交由Python解释器执行,对于a,解释器保存的就是其值'你'的utf8编码e4bda0,对于b,解释器通过u识别出它是unicode字符串,那就将其值由utf8转换成unicode放在内存。在python解释器中可以验证,

python2.X编码的更多相关文章

  1. 【Python】python2 str 编码检测

    python2 str 编码检测 import chardet s = 'sdffdfd' print type(s) print chardet.detect(s) s2 = '反反复复' prin ...

  2. 转:Python2字符编码问题汇总

    这篇文章的部分问题在Python3以后不再存在,老猿只是觉得文章的部分内容还是有参考价值,因此在此原文转发连接: Python2字符编码问题汇总

  3. 关于Python2字符编码的体会

    对于Python的字符编码问题也懵了很久,最近做爬虫多次遇到网页转码的问题,干脆彻底解决掉!Just Do it! 1.两种类型str与unicode str和unicode都是basestring的 ...

  4. 不想再被鄙视?那就看进来! 一文搞懂Python2字符编码

    程序员都自视清高,觉得自己是创造者,经常鄙视不太懂技术的产品或者QA.可悲的是,程序员之间也相互鄙视,程序员的鄙视链流传甚广,作为一个Python程序员,自然最关心的是下面这幅图啦 我们项目组一值使用 ...

  5. python2.x编码问题实例

    1,编码问题,主要是区分面向人类的字符串,面向计算机的字节序列 在python3中,字符串是str(默认即unicode),字节序列是bytes 在python2中,字符串是unicode,字节序列是 ...

  6. Python2字符编码问题汇总

    目录 从字符编码说起 unicode与utf-8 当编解码遇上Python2.x unicode 与 str 区别 __str__ __repr__的区别 unicode str utf-8关系 un ...

  7. Python2中编码错误---重组人表皮生长因子凝胶(易孚格式转化为UTF-8

    在python2的使用中,总会遇到各种各样的编码问题,这也是使用Python2最头疼的一件事情,幸好python3解决了编码的问题. 下面我在爬虫时遇到的类似重组人表皮生长 ...

  8. 从python2,python3编码问题引伸出的通用编码原理解释

    今天使用python2编码时遇到这样一条异常UnicodeDecodeError: ‘ascii’ code can’t decode byte 0xef 发现是编码问题,但是平常在python3中几 ...

  9. python3与python2的编码问题

    在讲这个问题之前,我们先说说unicode的工作原理.unicode包含了跟全球所有国家编码的映射关系,就是不管你用哪个国家的编码,unicode都能找到它在unicode中的编码.那么无论你用什么编 ...

随机推荐

  1. Java - Calendar类的使用

    今天在写代码时需要用到时间相关的类,一开始,数据库中存的数据类型是timestamp的,所以在Java中就使用了 Timestamp类型,但当调用Timestamp类型的方法时发现,它的很多方法都是d ...

  2. 关于VC中的附加进程调试

    今天领导要求在服务端添加一个获取会议参数的功能接口,接口写好后要自己测试,但是没有客户端的源码,只有客户端安装程序和客户端与服务端发送信令的底层库KSYSClient.dll,而我修改了客户端需要底层 ...

  3. codeforces水题100道 第十七题 Codeforces Beta Round #25 (Div. 2 Only) A. IQ test (brute force)

    题目链接:http://www.codeforces.com/problemset/problem/25/A题意:在n个书中找到唯一一个奇偶性和其他n-1个数不同的数.C++代码: #include ...

  4. 123、 android Retrofit 介绍和使用(转载)

    简单使用:http://blog.csdn.net/bitian123/article/details/51899716 http://blog.csdn.net/duanyy1990/article ...

  5. 微信小程序源码案例大全

    微信小程序demo:足球,赛事分析 小程序简易导航 小程序demo:办公审批 小程序Demo:电魔方 小程序demo:借阅伴侣 微信小程序demo:投票 微信小程序demo:健康生活 小程序demo: ...

  6. Delphi应用程序的调试(六)步进式代码调试

    步进式代码调试(Stepping Through Your Code) 步进式代码调试是最基本的调试操作之一,但仍要在此讲述.人们常常容易犯只见树木不见森林的错误.经常复习基本的知识有助于读者了解以前 ...

  7. Esper学习之十四:Pattern(一)

    1. Pattern Atoms and Pattern operatorsPattern是通过原子事件和操作符组合在一起构成模板.原子事件有3类,操作符有4类,具体如下: 原子事件:1). 普通事件 ...

  8. Telnet IMAP Commands Note

    http://busylog.net/telnet-imap-commands-note/  Telnet IMAP Commands Note https://www.cnblogs.com/qiu ...

  9. nginx(二)----ubuntu14.04下启动或重启和关闭nginx

    /** * lihaibo * 文章内容都是根据自己工作情况实践得出. *如有错误,请指正 *转载请注明出处 */ 一.启动 /usr/local/nginx/sbin/nginx或者cd /usr/ ...

  10. jvisualvm连接远程应用终于成功,附踩大坑记录!!(一:jstatd方式)

    一.问题概述 连接远程java应用除了jstatd方式,还有jmx方式.不必拘泥于一种,一种不行可以果断尝试另一种,兴许就行了. 姊妹篇在这: jvisualvm连接远程应用终于成功,附踩大坑记录!! ...