黑马程序员Python教程:5分钟战胜Python字符编码教案.docVIP

黑马程序员Python教程:5分钟战胜Python字符编码教案.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1. 本文不谈复杂的理论,就经验教你字符处理八字真言:确定编码,同类交互。 文章针对Python 2.7,主要因为3对的编码已经有了很大的改善并且实际原理一样,更改一下操作命令即可。 了解完本文,你可以轻松解决文字处理,特殊平台(Windows?)下的编码,爬虫编码等问题。 阅读建议 本文分为如下几个部分: 原理 具体操作 建议的使用习惯 疑难问题解答 如果想要了解我给出的使用习惯,可以直接跳到建议的使用习惯。 如果只想要解决相关问题可以直接跳到疑难问题解答。 希望本文能够帮到你。 理 为了理解方便,这里不谈理论只做类比,具体想要进一步了解各种编码的理论的一下好了。 首先说一下我们为什么会碰到各式各样的编码问题: 因为我们没有统一编码 因为我们没有用对命令(传对数据) 再说一下编码是什么,Python的编码看似复杂,实际上可以看做只有两类编码:Unicode,二进制 Unicode 相信都很熟悉:,就是\u0000这样的 二进制编码也很简单,就是\x00\x00这样的,平常看到的utf-8,cp936都是二进制编码 二进制编码是具象的样就可以存储,而Unicode是抽象的,不能这样存 #coding=utf8 ? # Unicode编码演示 print(Unicode:) print(repr(Unicode编码))` ? # 二进制编码演示 print(u二进制编码:) print(repr(Unicode编码))` ? # 是看个样子,代码不必去深究 再说怎么做,就是只有同种编码之间才可以操作 举个简单的类比 就把一串数据比为烤鸭,我们作为人和鸭子不同种看待烤鸭的态度完全不一样。 我们看到的是晚上的配菜,鸭子看到的是自己二舅。 我用逛烤鸭店的时候就会。 因为我在烤鸭店看到了二舅。 这里说的同种就是我们熟悉的各种编码方式:utf-8,unicode,ucs-bom 这也就是编码问题的核心,非常重要。 最后说一下Python的环境 本身代码是用Ascii解码的,文件里有Ascii无法解码的内容的话要告知Python怎么解码 内部大量命令都是默认接受Unicode # 告知的命令就是下面这一行,删掉就会报错 #coding=utf8 print(u测试编码) 具体操作 拿到各种编码的内容自然是不用说,那么如果我们想要自己构造怎么做呢,看下面: #coding=utf8 ? # 字符串前面加u会默认构造出Unicode的字符串 unicodeString = uUnicode字符串 ? # 字符串前面什么都不加会构造出默认编码(首行限定了现在的utf8)的字符串 utf8String = Utf-8字符串 ? # 当然,没有首行,默认的编码是Ascii 那么他们之间怎么转换呢,同样很简单: # 接上一段程序 ? # Unicode转化为二进制编码中的一种:utf8 unicodeString.encode(utf8) ? # 二进制编码根据自己的编码种类转化为Unicode utf8String.decode(utf8) ? # 如果二进制编码中混进了奇怪的东西可以根据需求用特殊的decode策略 print(repr(u8字\x00符串.decode(utf8, replace))) 那么怎么样会出现问题呢: # 接上一段程序? # 如果我们把他们转化成同样的编码方式就可以操作(例如相加) print(repr(unicodeString + utf8String.decode(utf8))) print(repr(unicodeString.encode(utf8) + utf8String)) ? # 但如果不转化,当然就会出现满世界的烤鸭二舅啦 unicodeString + utf8String ? # 所以另一方面也发现,编码转换是需要我们告诉程序怎么做的 # 所有`decode`操作都会生成Unicode编码,这是为了方便我之前说的大量接受Unicode的内部命令 所以我们需要确定程序使用的编码,这是我们需要告诉程序的东西 一方面在操作字符串的时候确定是同种编码 另一方面在使用非自己写的命令时,一般使用Unicode,或者使用接收二进制编码的命令 #coding=utf8 # 这里拿写入文件举例 ? # 一般使用Unicode with open(Unicode.txt, w) as f: f.write(uUnicode测试) ? # 或者使用接收二进制编码的命令 with open(Utf8.txt, wb) as f: f.write(Utf8测试) ? # 你可以反过来做个测试,自然会报错 # 二进制的命令方便了在不知道怎么解码的情况下也能进行操作(写入文件) 建议的使用习惯 相信到这里我

文档评论(0)

xiaofei2001129 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档