聊聊python 2中的编码
为什么需要编码:
计算机可以存储和处理二进制,那么从文字到计算机可以识别的二进制之间需要对应的关系,于是便有了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中的编码的更多相关文章
- python语言中的编码问题(续)
上文提到了python开发中非常重要的两处设置. 一个是编解码器的默认设置defaultencoding >>> import sys >>> sys.getdef ...
- python语言中的编码问题
在编程的过程当中,常常会遇到莫名其妙的乱码问题.很多人选择出了问题直接在网上找答案,把别人的例子照搬过来,这是快速解决问题的一个好办法.然而,作为一个严谨求实的开发者,如果不从源头上彻底理解乱码产生的 ...
- Python 2 中的编码
在 Python 尤其是 Python2 中,编码问题是困扰开发者尤其初学者的一大问题.什么 Unicode/UTF-8/str ,又是 decode/encode 的,搞得人头都大了.其实不然,这有 ...
- python 2 和python 3 中的编码对比
在 Python 中,不论是 Python2 还是 Python3 中,总体上说,字符都只有两大类: 通用的 Unicode 字符: (unicode 被编码后的)某种编码类型的字符,比如 UTF-8 ...
- day06 python 3中的编码
#python2 和 python3 的一些区别 ''' #python2 print('aaa') print'aaa' range() xrange()生成器 raw_input() #pytho ...
- python中的编码问题:以ascii和unicode为主线
1.unicode.gbk.gb2312.utf-8的关系 http://www.pythonclub.org/python-basic/encode-detail 这篇文章写的比较好,utf-8 ...
- python中的编码声明
python中的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单 #!/usr/bin/python 相当于写死了 python 路径(是告诉OS执行这个py时,调 ...
- python unicode 转中文 遇到的问题 爬去网页中遇到编码的问题
How do convert unicode escape sequences to unicode characters in a python string 爬去网页中遇到编码的问题 Python ...
- python中的编码与解码
编码与解码 首先,明确一点,计算机中存储的信息都是二进制的 编码/解码本质上是一种映射(对应关系),比如‘a’用ascii编码则是65,计算机中存储的就是00110101,但是显示的时候不能显 ...
随机推荐
- office project 激活
office project 2010激活方式: 图上中,箭头位置,可能没激活,需要软件激活 ( mini-KMS Activator(Office2010激活工具) V1.2 绿色版 ) 激活方式如 ...
- 挖掘微信Web版通信的全过程 [转]
昨天是周末,在家闲得无聊,于是去weiphone.com逛了一圈,偶然发现有人发了一帖叫<微信 for Mac>, 这勾起了我的好奇心,国内做Mac开发的人确实很少,对于那些能够独自开发一 ...
- MVC图片验证码
C#类库: public class YZM { public string YZMcode = String.Empty; public byte[] load() { Bitmap bit = , ...
- WMSWebServiceExtension 使用,支持压缩
using System;using System.Collections.Generic;using System.IO.Compression;using System.Diagnostics;u ...
- 高级搜索插件solis search在umbraco中的使用
好久没有写关于umbraco的博客了,这段时间在研究solis search,感觉它太强大,好东西是需要分享的,所以写一篇简单的使用博客分享给个人umbraco爱好者. 简介 在了解solis sea ...
- Laravel学习笔记(四)数据库 数据库迁移案例
创建迁移 首先,让我们创建一个MySql数据库“Laravel_db”.接下来打开app/config目录下的database.php文件.请确保default键值是mysql: return arr ...
- 导入 RecyclerView 控件 的过程(Android 6.0)
由于本人不熟悉Android Studio和java的思维方式,开发android studio的同事告诉我不太推荐使用ListView 而google 建议使用RecycleView ,经过了一顿查 ...
- Windows Linux 之间rsync同步CODE文件
Windows Linux 之间rsync同步CODE文件 一.环境Windows:OS:Microsoft Windows Web Server 2008 SP1IP:192.168.88.197 ...
- 关于MariaDB5.5不是有效的Win32 应用程序
操作系统:Windows XP sp3 数据库:MariaDB 5.5.49 问题原因: 使用文本编辑器打开mysqld.pdb文件. 在13行1012列,会发现如下信息: 这说明v5.5.49是使用 ...
- windows python文件拷贝到linux上执行问题
之前在Windows下写好了一个Python脚本,运行没问题,今天在Linux下,脚本开头的注释行已经指明了解释器的路径,也用chmod给了执行权限,但就是不能直接运行脚本. 1 问题1: 报错:: ...