当前位置: 首页>移动开发>正文

python936编码 python 编码问题

Python之所以受到程序猿&会写程序的非程序猿的热捧,很大一部分原因是因为其对字符串等数据流的方便快捷处理方式,但是,凡事有利必有弊,python2.x在处理数据过程中,尤其是在处理无比蛋疼博大精深的中文时,最大的困难就是编码问题,这也是每一个新手(比如我)都会遇到的遇到的一道大坎儿。。。要想坚持人生苦短,我用python洗脑崇高信念,就必须大步向前,跨过这道坎儿。

1、几种常见编码

遇到一个问题,最快捷最有效的解决方式就是究其根源。因此,要想彻底搞定python中的编码问题,首先需要知道有哪些编码方式以及这些编码方式的含义。

1.1 ASCII

American Standard Code for Information Interchange,简称ASCII,是由美国人制定的一套编码标准。在计算机中,任何信息都表示为一个二进制串,每一位二进制有0和1两种取值,八位的二进制就可以表示256种状态,即一个字节(byte),ASCII码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII码使用7位二进制数(其余一位为0)表示英文中的大小写字母、数字0-9、标点符号和特殊的控制字符,常用的有:65~90为26个大写英文字母,97~122号为26个小写英文字母。

1.2 UNICODE

UNICOD是由ISO (国际标谁化组织)制定的一种业界编码标准。在unicode编码中,无论是半角的英文字母,还是全角的汉字,它们都是统一的”一个字符(一个文化相关的符号)“,同时,也都是统一的”两个字节(一个8位的物理存贮单元)“。

1.3 UTF-8

8-bit Unicode Transformation Format,简称UTF-8,是一种针对Unicode的可变长度字符编码,也是一种前缀码,每次8个位传输数据,使用1~4个字节表示一个符号,根据不同的符号而变化字节的长度。
ASCII是UTF-8的一个子集。

1.4 GB2312、GBK和GB18030

GB2312编码是中国制定的一种中文字符集,共收录6763个汉字。GBK是GB2312扩展后的编码方式,GBK包括了GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。 GB18030在GB2312的基础上添加了几千个新的少数民族的字,它和UTF-8一样都采用多字节编码,每个字可以由1个、2个或4个字节组成。

2、Python中的编码

2.1 .py文件编码

在文件头进行编码注释。如果不注释,默认使用ASCII编码格式,注释的格式主要有三种:
- # -*- coding: utf-8 –*-
- # coding: utf-8
- # coding = utf-8

个人比较喜欢第二种格式,简洁易懂。

2.2 程序输入数据编码

在处理数据(如,网页html)时,数据编码格式的不同往往会导致处理模块的异常,针对这种情况,首先调用detect函数检测其原始编码方式,然后进行decode解码,最后再encode编码成需要的格式。
detect函数使用:
- 引入chardet包 import chardet,如果未安装,到这里下载,解压后进入文件夹,执行命令python setup.py install
- 调用函数,结果返回一个字典

import chardet
result = chartdet.detect(response_html)
print result  # {'confidence': 0.99, 'encoding': 'utf-8'}

2.3 strunicode

  • str和unicode都是basestring的子类,str是由unicode经过encode编码后的字节串,
  • unicode 由字符组成
  • str使用decode
  • unicode使用encode
  • decode或encode函数可以添加ignore参数,如:gbkTypeStr = unicodeTypeStr.encode(“GBK“, ‘ignore’)

3、小结

python2.x中的编码问题一直是一个大坑,要想免于被坑,最好的方法就是彻底搞明白上面所说的几种编码方式,下图是在网上找到的一张编码小结图片。

在处理数据时,如果不幸入坑,试试下面几种方法:

- 编码统一

- 先解码(decode)后编码(encode)

- 因数据而异(不同编码)

- 巧用detect函数检测真正的编码方式

- 添加ignore参数



https://www.xamrdz.com/mobile/4n31961889.html

相关文章: