python中文乱码问题深入分析

python中文乱码问题深入分析

ID:20389857

大小:78.88 KB

页数:8页

时间:2018-10-10

python中文乱码问题深入分析_第1页
python中文乱码问题深入分析_第2页
python中文乱码问题深入分析_第3页
python中文乱码问题深入分析_第4页
python中文乱码问题深入分析_第5页
资源描述:

《python中文乱码问题深入分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、python中文乱码问题深入分析一直以來,python屮的中文编码就是一个极为头人的问题,经常抛出编码转换的异常,python中的str和Unicode到底足一个什么尔西呢?在本文中,以’吩’来解释作示例解释所有的问题,“哈”的各利1编码如卜:1.UNICODE(UTE8-16),C854;2.UTF-8,E59388;3.GBK,B9FE。一、python中的str和Unicode一直以来,python中的中文编码就是一个极为失大的问题,经常抛出编码转换的界常,python中的str和Unicode到底是•一个什么东西呢?在python中提到Unicod

2、e,—•般指的是Unicode对象,例如’哈哈’的Unicode对象为u’u54c8u54c8’而str,是一个字7Vf数组,这个字节数组表示的是对Unicode对象编码(可以是utf-8、gbk、cp936、GB2312)p的存储的格式。这里它仅仅是一个字节流,没冇其它的含义,如果你想使这个字节流敁示的内容有意义,就必须用正确的编码格式,解码兄示。例如:»>SU=u、嗜嗜,>>>s_utf8=su.encodeutf-8f>»>s_utf8Jxe5x93x88xe5x93x88J>>>prints_utf8銷堝樨>>>s_gbk=su.e

3、ncodegbkJ>»>s_gbk'xb9xfexb9xfeJ>>>prints_gbk哈哈>>>printsu哈哈个字节数组,存放的就是’xe5x93x88xe5x93x88’,但是这仅仅是一个字节数组,如果你想将它通过print语化输出成哈哈,那你就失望了,为什么呢?因为print语句它的实现足将要输出的内界传送/操作系统,操作系统会根据系统的编码对输入的字节流进行编码,这就解释了为什么utf-8格式的字符屯“哈哈”,输出的是“鍋堝裤”,因为’xe5x93x88xe5V93x88’HjGB2312去解释,其显示的出來就是“

4、鍋堝樨”。这里再强调-下,str记录的是字节数纟II,只是某种编码的存储格式,至于输出到文件或是打印ili来是什么格式,完伞取决于其解码的编码将它解码成什么样子。这垠再对print进行一/、(补充说明:当将一个Unicode对象传给print时,在内部会将该unicode对象进行-•次转换,转换成本地的默汄编码(这仅是个人猜测)二、str和Unicode对象的转换str和Unicode对象的转换,通过encode和decode实现,具体使用如下:>>>print锅禍Ws.decode.encodeutf-8J>将GBK’哈哈’转换成Unico

5、de,然后冉转换成UTE8三、SetdefaultencodingTypeMhelp’"copyright",’’credits’’or"license"formoreinformation.»>s=,哈哈、〉>〉s.encodeTraceback",line1,in〈module〉IJnicodeDecodeError:JasciiJcodeccanJtdecodebyte0xb9inposition0:ordinalnotinrange<128〉>>>importsy

6、s〉>〉reload〈noduleJsysJ〈built-in〉〉>>>sys.setdefaultencoding>>s-encodeutf-8,>Jxe5x93x88xe5x93x88J»>如上图的演示代码所示:当把s(gbk字符串)直接编码成utf-8的吋候,将抛出异常,但足通过调川如下代码:importsysreload(sys)sys.setdefaultencodingCgbk')后就可以转换成功,为什么呢?在python中str和Unicode在编码和解码过程中,如果将一个str直接编码成W—种编码,会

7、先把str解码成imicode,采用的编码为默认编码,一般默认编码是anscii,所以在上面示例代码中笫一次转换的时候会出错,当设定当前默认编码为’gbk’后,就不会出错了。至于代10&(1(373)是因为?71:110112.5初始化后会删除sys.setdefaultencoding这个方法,我们需耍重新载入。四、操作不同文件的编码格式的文件建立一个文件test,txt,文件格式用ANSI,内容为:abc中文用python来读取#coding=gbkprintopen(〃Test.txt〃).read()结果:abc中文把文件格式改成口T8:结果:ab

8、c涓构显然,这垠需耍解码:#coding=gbkimportcod

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。