为什么需要编码:

计算机可以存储和处理二进制,那么从文字到计算机可以识别的二进制之间需要对应的关系,于是便有了ASCII,ASSCII使用7位字符,由于1byte=8bit,所以最高位补一个0,使用8位以方便计算和处理;

而对于拉丁语系的技术宅们来说,对高位空着的,使用最高位正好可以用于拉丁语字符,使用一个字节表示一个字,这套编码为latin-1;

但是万万没有想到的是,对于东亚的国家,汉语字符常用的就有几千个,于是国家标准局制定了一份中文编码GB2312,通过两个字节表示一个汉字,就是可以表示的汉字个数为2的16次方,且最高位为0兼容ASCII,为32768个汉字,后来出现的GBK兼容GB2312;

但是,使用GBK编码仅仅可以表示汉字和英文字符,无法做到多种语言同时出现的时候同时表示,这个时候,Unicode(又称为万国码)出现了,Unicode采用32位(4个字节)表示一个字符,Unicode是一种编码,用于指定字符到二进制之间的对应关系,对于存储和传输,Unicode有几种不同的实现,比较常用的有UTF-8;

在python2中,如果在源码首行不显示指定编码,则无法再源码中出现ASCII编码

python中的编码:

在python中有两个表示字符串的类型:str和unicode;str可以理解为一个存储二进制内容的容器,str不存储编码信息,对str的迭代会按照在内存中的字节顺序依次迭代;对于Unicode类型,python在内存中的存储和使用时按照UTF-8格式,代码中表示前面加u;

unicode和str之间的转换,decode将str转换为指定格式的Unicode类型,encode表示将一个Unicode按照指定的格式解析为str;

文件读写:

内置的open函数打开一个文件,read方法读取一个str,如果读取的是其他编码的文字,则需要decode之后才可以使用;

对于使用一个open函数打开一个文件之后的写操作(多字节编码的字符串),则需要将需要写入的字符串按照其编码encode为一个str,如果直接写入,则会引起错误,如果在代码中加入encodeing声明,则会按照声明的编码格式encode之后写入;

使用codecs模块提供的open函数,可以直接指定号编码打开一个文本文件,那么读取到的文件内容则可以直接是一个unicode字符串,使用codecs.open可以避免很多编码问题:

建议:

1、字符编码声明:在代码开头声明编码格式:

2、使用codecs的open函数处理文本文件;

3、尽可能使用unicode而不是str:在所有的字符串引号前面加u;

聊聊python 2中的编码的更多相关文章

  1. python语言中的编码问题(续)

    上文提到了python开发中非常重要的两处设置. 一个是编解码器的默认设置defaultencoding >>> import sys >>> sys.getdef ...

  2. python语言中的编码问题

    在编程的过程当中,常常会遇到莫名其妙的乱码问题.很多人选择出了问题直接在网上找答案,把别人的例子照搬过来,这是快速解决问题的一个好办法.然而,作为一个严谨求实的开发者,如果不从源头上彻底理解乱码产生的 ...

  3. Python 2 中的编码

    在 Python 尤其是 Python2 中,编码问题是困扰开发者尤其初学者的一大问题.什么 Unicode/UTF-8/str ,又是 decode/encode 的,搞得人头都大了.其实不然,这有 ...

  4. python 2 和python 3 中的编码对比

    在 Python 中,不论是 Python2 还是 Python3 中,总体上说,字符都只有两大类: 通用的 Unicode 字符: (unicode 被编码后的)某种编码类型的字符,比如 UTF-8 ...

  5. day06 python 3中的编码

    #python2 和 python3 的一些区别 ''' #python2 print('aaa') print'aaa' range() xrange()生成器 raw_input() #pytho ...

  6. python中的编码问题:以ascii和unicode为主线

      1.unicode.gbk.gb2312.utf-8的关系 http://www.pythonclub.org/python-basic/encode-detail 这篇文章写的比较好,utf-8 ...

  7. python中的编码声明

    python中的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单 #!/usr/bin/python 相当于写死了 python 路径(是告诉OS执行这个py时,调 ...

  8. python unicode 转中文 遇到的问题 爬去网页中遇到编码的问题

    How do convert unicode escape sequences to unicode characters in a python string 爬去网页中遇到编码的问题 Python ...

  9. python中的编码与解码

      编码与解码 首先,明确一点,计算机中存储的信息都是二进制的   编码/解码本质上是一种映射(对应关系),比如‘a’用ascii编码则是65,计算机中存储的就是00110101,但是显示的时候不能显 ...

随机推荐

  1. JMeter Webservice测试计划

    一.新建测试计划:HelloWorld测试计划 二.添加线程组 编辑线程组属性: 三.添加 SOAP/ XML-RPC 请求元素 四.填入url地址及请求报文 此处的请求报文,是用soapUI生成的, ...

  2. MyBatis原理分析之四:一次SQL查询的源码分析

    上回我们讲到Mybatis加载相关的配置文件进行初始化,这回我们讲一下一次SQL查询怎么进行的. 准备工作 Mybatis完成一次SQL查询需要使用的代码如下: ) { ); ) { throw ne ...

  3. Visual studio 类视图和资源视图不显示的问题

    关于Visual studio 类视图和资源视图不显示的问题 解决方法: 1. 工具—选项—文本编辑器—C/C++—高级,浏览/导航下的禁用数据库选项置为False; 2. 输入命令:devenv / ...

  4. The server encountered an internal error that prevented it from fulfilling this request.

    type Exception report message Request processing failed; nested exception is org.mybatis.spring.MyBa ...

  5. 关于ios使用jquery的on,委托事件失效

    $('.parents').on("click",'.child',function(){}); 类似上面这种,在ios上点击"child"元素不会起作用,解决 ...

  6. 安卓 JDK、SDK、ADT 区别

    问题一:android软件开发是用java语法,但是为什么开发环境还需要jdk,有android sdk不就可以了吗? 答: 我知道写字要用笔,但为什么还需要笔芯(墨水),有笔杆不就可以了吗? 问题二 ...

  7. 路由跟踪语法:tracert www.love125.com

    tracert  www.love125.com 路由跟踪语法

  8. 在Linux上编写C#程序

    自从C#开源之后,在Linux编写C#程序就成了可能.Mono-project就是开源版本的C#维护项目.在Linux平台上使用的C#开发工具为monodevelop.安装方式如下: 首先需要安装一些 ...

  9. android 绑定spinner键值对显示内存地址的问题

    初学android,估计是.net学傻了,觉得android好麻烦. 绑定下拉菜单Spinner键值对. 参照这篇文章,地址:http://blog.csdn.net/shouliang52000/a ...

  10. W5200移植W5500驱动教程

    说明,移植例程为我按照这个教程移植的例程,测试通过.工程模板为我经常使用的一个w5500模板,可以在里面直接添加文件编程.1. 将driver文件夹中W5500文件夹和所有.c文件复制到工程/sour ...