python2 编码问题小结

在python读取txt和excel文件时,经常遇到编码格式不一致,导致文件无法写入或读取后进行正确的判断。下面对文件的编码格式进行简单的总结

一、字符编码介绍

 1.        Iso8859-1

 Iso8859-1是单字节编码,和ascii编码类似。最多表示的字符范围是0-255,应用于英文系列。

 2.        BGK

 GBK是汉字的国际编码,专门用来表示汉字的,属于双字节编码。其中gbk能同时编码简体汉字和繁体汉字。gbk2312只能编码简体字。

 3.        Unicode

 Unicode是最统一的编码,可以用来编码所有的语言的字符,并且是定长双字节的编码(也有四字节编码)。因此,unicode是不兼容iso8859-1编码,也不兼容任何编码。

 但是,定长编码便于计算机处理(但是gbk编码不是定长),因此现在大多数软件内部使用unicode编码。

 4.        UTF(存储格式)

 因为unicode编码不兼容iso8859-1编码,并且定长编码容易造成空间浪费,所以,unicode编码不便于传输以及存储。utf编码是不定长编码,每一个字符的长度从1-6个字节不等(一般来说,英文字母使用一个字节表示,汉字使用三个字节表示),且兼容iso8859-1编码。

注:utf编码能节省空间是相对于unicode而言。但对于汉字的网页,utf编码依然比unicode编码更省空间。因为,汉字网页中充斥着大量的英文字符。对于纯汉字而言,gbk编码比utf编码节省空间

二、Python 2中的问题

 1.        如何检测python中字符的编码格式

 Python中有一个chardet模块用于检测字符的编码格式。

 用法:import chardet

          chardet.detct(xxx)

 该函数返回一个字典{‘encoding’:xxx,’confidence’:0-1},包括该字符的编码格式,以是该编码的置信度

 2.        Python 中的编码转化

 Unicode将所有的字符都对应上了相应的码点,而utf-8或ascii不过是对应从unicode到字节的映射方式。有映射方式,就有映射方向。把从unicode到字节码(byte string)称为encode,把从字节码(byte string)到unicode码称为decode。

 3.        encode和decode的用法

 先看看decode和encode的语法:

  a)        decode()方法语法:

  str.decode(encoding = “utf-8”,errors = “strict”)

  参数:

           encoding  :        要使用的编码,如“utf-8”

           errors:               设置不同的错误处理方案。默认为“strict”,意为编码错误引起一个UnicodeError。“ignore”则会忽略非法字符;

           “replace”则会用?取代非法字符;“xlmlcharrefreplace”则使用XML字符引用

  b)        encode()方法语法

  str.encode(encoding = “utf-8”,errors= “strict”

三、读写文件

 一般我们使用python中内置的open()方法打开文件时,read()读取的是str,读取后需要使用正确的编码格式进行decode()。Write()写入时,如果参数是unicode,则需要使用希望写入的编码进行encode()。

 如果是其他编码格式的str,则需要先用该str进行decode(),转化成unicode后,再使用写入的编码进行encode。即:将非unicode编码的str,转化为unicode编码格式的str。

 如果直接将unicode作为次数传入write方法,首先要使用源代码文件的字符编码进行编码。 

四、编码声明

 #encoding:utf-8的作用:
py文件是不支持中文的,即使是中文注释也是不行的。utf-8声明是把文件的编码类型改为utf-

 参考:http://blog.csdn.net/xw_classmate/article/details/51933904



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值