设为首页 收藏本站
查看: 693|回复: 0

[经验分享] python经常出现的字符编码问题详解

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2016-1-18 10:33:05 | 显示全部楼层 |阅读模式
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()来设置源文件的编码格式。

                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-165964-1-1.html 上篇帖子: python给qq发邮件 下篇帖子: ptython之购物车 python
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表