pythn中文乱码问题深入分析.docVIP

  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文档。上传文档
查看更多
pythn中文乱码问题深入分析.doc

python中文乱码问题深入分析 一直以來,python屮的中文编码就是一个极为头人的问题,经常抛出编码转换的异常, python中的str和Unicode到底足一个什么尔西呢? 在本文中,以’吩’来解释作示例解释所有的问题,“哈”的各利1编码如卜: UNICODE (UTE8-16), C854; UTF-8, E59388; GBK, B9FE。 一、python 中的 str 和 Unicode 一直以来,python中的中文编码就是一个极为失大的问题,经常抛出编码转换的界常,pyt hon中的str和Unicode到底是?一个什么东西呢? 在python中提到Unicode, —?般指的是Unicode对象,例如’哈哈’的Unicode对象为 u’\u54c8\u54c8’ 而str,是一个字7Vf数组,这个字节数组表示的是对Unicode对象编码(可以是utf-8、gbk、 cp936、GB2312)p的存储的格式。这里它仅仅是一个字节流,没冇其它的含义,如果你想使 这个字节流敁示的内容有意义,就必须用正确的编码格式,解码兄示。 例如: ? SU = u、嗜嗜, s_utf8 = su.encodeutf-8f ? s_utf8 J \xe5\x93\x88\xe5\x93\x88J print s_utf8 銷堝樨 s_gbk = su.encodegbkJ ? s_gbk \xb9 \xf e \xb9 \xf eJ print s_gbk 哈哈 print su 哈哈 个字节数组,存放的就是’\xe5\x93\x88\xe5\x93\x88’,但是这仅仅是一个字节数组,如果 你想将它通过print语化输出成哈哈,那你就失望了,为什么呢? 因为print语句它的实现足将要输出的内界传送/操作系统,操作系统会根据系统的编码对 输入的字节流进行编码,这就解释了为什么utf-8格式的字符屯“哈哈”,输出的是“鍋堝 裤”,因为’\xe5\x93\x88\xe5V93\x88’HjGB2312去解释,其显示的出來就是“鍋堝樨”。 这里再强调-下,str记录的是字节数纟II,只是某种编码的存储格式,至于输出到文件或是 打印ili来是什么格式,完伞取决于其解码的编码将它解码成什么样子。 这垠再对print进行一/、(补充说明:当将一个Unicode对象传给print时,在内部会将该u nicode对象进行-?次转换,转换成本地的默汄编码(这仅是个人猜测) 二、str和Unicode对象的转换 str和Unicode对象的转换,通过encode和decode实现,具体使用如下: print锅禍Ws.decodeJ gbkJ print 锅禍W 将GBK’哈哈’转换成Unicode,然后冉转换成UTE8 三、Setdefaultencoding Type Mhelp’\ copyright, ’’credits’’ or license for more information. ? s =,哈哈、 〉〉s.encodeJ utf-8J Traceback nost recent call last〉: File stdin, line 1, in 〈module〉 IJnicodeDecodeError: JasciiJ codec canJ t decode byte 0xb9 in position 0: ordinal not in range128〉 import sys 〉〉reloadsys 〈nodule J sysJ〈built-in〉〉 sys.setdefaultencodingJ gbkJ〉 l s - encode utf-8, J \xe5\x93\x88\xe5\x93\x88J ? 如上图的演示代码所示: 当把s(gbk字符串)直接编码成utf-8的吋候,将抛出异常,但足通过调川如下代码: import sys reload(sys) sys. setdefaultencodingC gbk) 后就可以转换成功,为什么呢?在python中str和Unicode在编码和解码过程中,如果将 一个str直接编码成W—种编码,会先把str解码成imicode,采用的编码为默认编码,一 般默认编码是anscii,所以在上面示例代码中笫一次转换的时候会出错,当设定当前默认 编码为’gbk’后,就不会出错了。 至于代10(1(373)是因为?71:110112.5初始化后会删除sys. setdefaultencoding这个方法, 我们需耍重新载入。 四、操作不同文件的编码格式的文件 建立一个文件test, txt,文件格式用ANSI,内容为: abc中文 用python来读取 co

文档评论(0)

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

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

1亿VIP精品文档

相关文档