为什么需要编码:

计算机可以存储和处理二进制,那么从文字到计算机可以识别的二进制之间需要对应的关系,于是便有了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. user.sh

    #!/bin/bash n=1 while [ $n -le 5 ] do n=$(( $n + 1 )) user=user$n userdel -r $user echo "$user ...

  2. 找不到方法:“Boolean System.Runtime.Serialization.DataContractAttribute.get_IsReference()”的解决办法

    找不到方法:“Boolean System.Runtime.Serialization.DataContractAttribute.get_IsReference()”.的解决办法站点发布后部署到了两 ...

  3. 使用log4net 日志输出到数据库MySQL

    使用Log4Net的输出日志到MySQL 使用步骤如下: 1. 添加引用Log4Net.dll, mysql.data.dll到工程中 note: mysql.data.dll 版本要高,最好到mys ...

  4. cookie禁用了,session还能用吗?

    Cookie与 Session,一般认为是两个独立的东西,Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案.但为什么禁用Cookie就不能得到Session ...

  5. [JavaScript]JS由来

    JavaScript最早由Netscape公司开发 JavaScript的发展历程 我们知道Windows桌面程序是可以交互的,用户可以点击菜单.按钮.下拉列表等控件,并通过消息机制来响应用户操作. ...

  6. 【OpenCV练习】简单显示图片的代码

    今天依照网上的教程尝试了一下最基本的图片显示. 首先想说一下编译时出现的问题,开始时在编译时会出现无法识别cvReleaseImage的情况,是因为没有在配置中包含相应的core的库文件. 加进去就解 ...

  7. 跨平台编程:关于VS和QT那些事

    1.Win平台 Qt5.7 for Win32 (VS2013) 编辑器:Qt Creator 4.0 编译器:MSVC12 for X86 (cl.exe&link.exe) 调试器:CDB ...

  8. Google公布了禁用Chrome插件后的新解决方案

    chrome://flags/#enable-npapi 启用npapi后重启chrome,再打开 chrome://plugins/

  9. Unity3D 动画回调方法

    最近发现很多coder.在用Unity开发游戏的时候都需要一个需求就是..动画播到某一帧就要干什么事情.而且希望能得到回调. 在unity里面的window菜单有个.Animation工具.打开它.然 ...

  10. 更改yum源地址

    1.进入yum配置文件目录:cd /etc/yum.repos.d/ 2.备份配置文件:mv CentOS-Base.repo CentOS-Base.repo.bak 3.下载网易的配置,改成网易的 ...