码迷,mamicode.com
首页 > 编程语言 > 详细

python经常出现的字符编码问题详解

时间:2016-01-15 18:03:36      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:python编码错误详解:unicodedecodee-rror: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)

     python在进行字符串处理或者通过open函数读取文件时,经常会出现编码的错误:UnicodeDecodeE-rror: ‘ascii‘ codec can‘t decode byte 0xe6 in position 0: ordinal not in

range(128)这个是由于python在进行编码和解码的过程中,出现编解码不兼容时导致的错误。所以现在需要对字符的编码有个清晰的认识,不需要对编解码内部的内容进行深入的研究,只需要了解相关编码规则,在以后再遇到这样的问题时可以自己进行相关的处理就行。

     首先我们需要明确一点,计算机内部存储全部采用的是0,1编码,并不是以我们看到的字符形式出现的,比如1,2,3,汉字等这种形式进行存储的,计算机不认识汉字或者字符,只认识0或者1,那么这些汉字或者字符是怎么出现的呢,就是我们人为的为每个字符进行一个特殊的编码,然后再进行解码,在终端或者文件中才能显示出我们所熟悉的字符或者汉字,而不是0或者1。

1、现在的字符编码格式有ASCII编码,Unicode编码,UTF-8编码

  1.1 ASCII编码 

       这是美国为了英文字符采用的一种编码格式,共有128个字符包括数字,大小写字符以 及算术运算符        和逻辑运算符,其中还包括32个不能打印的特殊字符比如空格,tab键,换行符等。他们发现采用一       个字节的数量就可以表示完这128个字符,因为一个字节有8个位,在这8个位上采用0或者1,则可以       表示的状态有2的8次幂共有256个,则每一个状态表示一个字符完全可以胜任。那他们就采用低7位         用来表示这些字符,最高位用0来表示。对于英文而言ASCII已经能够胜任,可以加快通过计算机进行       信息交流的速度

  1.2 Unicode编码

        ASCII编码只适用英文字符,但是世界上的语言很多,ASCII已经不能胜任了,比如中文,ASCII是不        可能进行编码的,因此我们国家采用的编码时GB2312,后续还有很多标准。但是世 界上的语言很           多,人们就想着能不能采用一种统一的编码方式,把世界上所有的编码格式都唯一的进行标 示                unicode编码就应运而生了,对,它就是用来对世界上所有的文字进行编码的标准。

       unicode编码采用的编码格式有UCS-8,UCS-16,UCS-32,他们采用固定的字节来标示字符进行编码。

  1.3 UTF-8编码

        全称为(Unicode Transformation Format)通过全称我们就可以发现,其实UTF-8编码是以一个字节          为单位对unicode进行编码。需要说明的一点是UTF-8编码和unicode编码是不一 样的编码方式。

        如下表格:

 
Unicode编码(16进制)UTF-8 字节流(二进制)
000000 – 00007F0xxxxxxx
000080 – 0007FF110xxxxx 10xxxxxx
000800 – 00FFFF1110xxxx 10xxxxxx 10xxxxxx
010000 – 10FFFF11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

2、python的编码处理

    可以把python比作一个水池,这个水池中有一个入口和一个出口,而这个水池中对字符串采用的处理编码方式是unicode的,那么在入口处需要对输入进去的字符进行解码操作,解码采用的是decode()函数,可以采用decode(这里需要填写此文件的编码方式),然后通过unicode相关的库函数对字符串进行处理,在输出端,需要把输出的数据进行编码成我们想要的格式进行存储,采用的函数是encode(参数是我们想要的编码格式),对于unicode码和我们想要输出的编码格式有重复的字符时,可以不进行编码操作,比如数字,英文字符等,都可以直接进行存储的。

3、python源文件的编码格式

    即xxx.py这个文件的编码格式采用的是ASCII编码,可以通过sys模块的getdefaultencoding()函数获取默认的编码格式,当我们想要改变源文件的编码格式时,需要在源文件开头的地方输入# _*_ coding: UTF-8进行编码操作来改变源文件的编码格式或者还可以通过sys模块的函数setdefaultencoding()来设置源文件的编码格式。


python经常出现的字符编码问题详解

标签:python编码错误详解:unicodedecodee-rror: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)

原文地址:http://9269309.blog.51cto.com/9259309/1735272

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!