Python2 # -*- coding:utf-8 -*- #coding:utf-8 sys.getdefaultencoding() Unicode utf-8 gb2312编码问题

Python2与Python3编码区别

py3时:
a="中国" 和a=u"中国" 是一个意思,都表示str类型用unicode存储,即默认是unicode存储类型
c=b"中国" 表示str类型bytes存储类型

py2时:
a="中国" 和a=b"中国" 是一个意思,表示str类型bytes存储类型,即默认是bytes存储类型
a=u"中国" 表示str类型unicode存储类型

一、Python文件开始的文件编码类型声明

# -*- coding:utf-8 -*-

#coding:utf-8

用这两种方式可以告诉Python解释器,我是用utf-8编码来保存的文件,你应该用读取utf-8编码的方式来读取我的代码。但是,这和你实际用什么编码来存储你的代码没有直接关系。你这里声明的utf-8但你实际上用GB2312,解释器是不知道的,这里最好一致

二、字符串(str对象)默认编码方式

# demo1
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
# 可以看出默认编码是ASCII


# demo2
reload(sys)
>>> sys.setdefaultencoding('utf-8')
>>> sys.getdefaultencoding()
'utf-8'
# 可以看出默认编码是utf-8



在python中,编码解码其实就是不同编码之间的转换,Unicode就是各种编码之间转换的过渡。

编码就是:unicode→str,

解码就是str→unicode,

demo2代码执行之后如果执行

str="我是谁"
str.encode("gb2312")

在其内部实际执行的其实是:

str.decode('utf-8').encode('gb2312') 

因为我们已经设置默认编码是utf-8,所以先从utf-8解码到Unicode(上文提到过Unicode是过渡),再从Unicode编码到GB2312。

三、Unicode、utf-8以及gb2312

Unicode给所有可能出现的字符分配了一个编号。

utf-8和gb2312解决了Unicode给字符分配的编号如何存储的问题。对同一个字符不同的编码存储的方式可能不同。所以Unicode是过渡。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值