- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- PL技术简介以及前景分析.doc
- PL技术综合应用实训报告.doc
- PL控制物业供水设计.doc
- PL控制电机正反转教学案例.doc
- PL控制系统研究.doc
- PL气缸运动计数控制.doc
- PL理论试题A附答案(项目一项目五).doc
- PL电机控制竞赛样卷.doc
- PL的工业机器人设计及发展分析.doc
- PL的程序设计方法一经验设计方法pf.doc
- 2025四川南充市公路管理局南充市水务局遴选3人笔试备考题库附答案解析.docx
- 2025年清水河县事业单位联考招聘考试历年真题完美版.docx
- 2025年正安县事业单位联考招聘考试历年真题完美版.docx
- 2025年金沙县事业单位联考招聘考试真题汇编新版.docx
- 2025年乐业县辅警招聘考试真题汇编及答案1套.docx
- 2025年新龙县事业单位联考招聘考试历年真题附答案.docx
- 2025年淮阳县事业单位联考招聘考试历年真题含答案.docx
- 2025年紫金县事业单位联考招聘考试真题汇编含答案.docx
- 2025年永福县事业单位联考招聘考试历年真题推荐.docx
- 2025年睢县事业单位联考招聘考试历年真题含答案.docx
原创力文档


文档评论(0)