博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python的decode和encode
阅读量:4294 次
发布时间:2019-05-27

本文共 1600 字,大约阅读时间需要 5 分钟。

——————————————————————————————————————

    python 内置的文字编码是utf8

    decode 的作用是将其他编码转为utf8,如str.decode('gbk')将gbk编码转为utf8

    encode 的作用将utf8编码转为其他编码,如str.encode('gbk')将utf8转为gbk

——————————————————————————————————————

这是从网上找到的资料,但是这样的话encode('utf8')方法岂不是很鸡肋???

还是自己试验一次比较好,

>>> s = '我'>>> s'\xce\xd2'>>> s1 = s.decode('gbk')>>> s1u'\u6211'>>> s2 = s1.encode('utf8')>>> s2'\xe6\x88\x91'>>> len(s)2>>> len(s1)1>>> len(s2)3

这样看来似乎清晰了一些,Python内置的utf8和encode之后的utf8其实不是同样的“类":

内置的是一个每个字符长度为1的字符串,而转换之后的则是更像真实的内存里的状态,由3个字节组成,

我又写了两个文件来验证,分别采用gbk和utf8编码(额,显示代码部分没有转16进制)

gbk版

s = '我's1 = s.decode('gbk')s2 = s1.encode('utf8')s3 = s1.encode('gbk')def getCode(c):    code = ''    for i in c:        code += "\\"+str(ord(i))    return codeprint getCode(s),getCode(s1),getCode(s2),getCode(s3)print s,s1,s2print len(s),len(s1),len(s2),len(s3)

然后是utf8版

# coding:utf8s = '我's1 = s.decode('utf8')s2 = s1.encode('utf8')s3 = s1.encode('gbk')def getCode(c):    code = ''    for i in c:        code += "\\"+str(ord(i))    return codeprint getCode(s),getCode(s1),getCode(s2),getCode(s3)print s,s1,s2,s3print len(s),len(s1),len(s2),len(s3)
两个版本分别在cmd窗口,eclipse,idle下运行,情况如下:

idle全部能正常显示(哇!兼容做得不错,赞一个),

gbk

\206\210 \25105 \230\136\145 \206\210我 我 我2 1 3 2
utf8
\230\136\145 \25105 \230\136\145 \206\210我 我 我 我3 1 3 2

eclipse utf8版本最后一个字符乱码,另外一个报错

cmd窗口utf8”半显示”,只有1个长度的utf8和2个长度的gbk能正常显示,其他的乱码(看来python运行的cmd是采用utf8的。。。),gbk报错

结论

Python并不是以UTF8作为默认编码的,而是以Unicode作为默认编码,Unicode是一种编码规范,并不是一种实现,所以我们看到s.decode('utf-8')之后的字符长度是1,只有一个数字。
换句话说,Unicode提供了一套标准,为每个字符设置一个编码值,具体的实现则交给UTF-8等支持Unicode规范的编码去实现。(GBK不支持Unicode)
所以在Python2中,字符编码的关系是

你可能感兴趣的文章
CocoaPods安装和使用教程
查看>>
Beginning Auto Layout Tutorial
查看>>
block使用小结、在arc中使用block、如何防止循环引用
查看>>
iPhone开发学习笔记002——Xib设计UITableViewCell然后动态加载
查看>>
iOS开发中遇到的问题整理 (一)
查看>>
Swift code into Object-C 出现 ***-swift have not found this file 的问题
查看>>
为什么你的App介绍写得像一坨翔?
查看>>
RTImageAssets插件--@3x可自动生成@2x图片
查看>>
iOS开发的一些奇巧淫技
查看>>
常浏览的博客和网站
查看>>
Xcode 工程文件打开不出来, cannot be opened because the project file cannot be parsed.
查看>>
点击button实现Storyboard中TabBar Controller的tab切换
查看>>
Xcode 的正确打开方式——Debugging
查看>>
打包app出现的一个问题
查看>>
iOS在Xcode6中怎么创建OC category文件
查看>>
Expanding User-Defined Runtime Attributes in Xcode with Objective-C
查看>>
iOS7 UITabBar自定义选中图片显示为默认蓝色的Bug
查看>>
提升UITableView性能-复杂页面的优化
查看>>
25 iOS App Performance Tips & Tricks
查看>>
那些好用的iOS开发工具
查看>>