python3文件的编码类型是_python3.x Day3 文件编码

文件编码:

知识点不多,但及其重要,python2和python3处理机制还有不同点,需要注意。

首先:

编码、数据类型,完全不同的概念。

文件编码:可以遵循开发环境、可以自行设定。

变量值编码:python2、我不清楚,貌似可以设定吧sys.setdefaultcode()方法设定?

python3、变量值默认的编码就是unicode

简述一下,编码从utf-8到gbk过程:

utf-8 --> unicode --> gbk

gbk转为utf-8

gbk --> unicode --> utf-8

也就是说传说中的万国码,就是厉害。通过它可以转任何。

python2中:

#字符转编码:#python2 原编码(utf8) --> 目标编码(gbk),需要 str.decode("utf-8").encode("gbk"),#第一步的decode方法用于转码为unicode,参数为我当前是什么编码的(utf8),#第二步的encode方法用于从unicode到目标编码(gbk),参数为目标编码(gbk)#decode目标是unicode,encode源是unicode,不能跨过unicode直接用encode转为目标编码,这是字符转码的标准流程。

importsysprint(sys.getdefaultencoding()) #打印python环境的默认编码

s="你好"s_to_gbk=s.decode("utf-8").encode("gbk") #decode过程就变成unicode再encode到目标

print(s_to_gbk,type(s_to_gbk))

python3中:

存储为unicode编码,可以直接进行转码encode()方法,但是数据类型会被变为byte,不重要,编码反正转了。

可以通过decode()方法转为字符串,但此时仅改变了数据类型,编码没有发生变化,就是encode()时的编码。

编码、数据类型  完全不同的概念

#python3 过程一样,先到转到unicode,再到目标编码,#但是,python3,底层存储时的值就是unicode编码的,所以字符串变量不再提供decode方法#由此,明确两个问题#1、python3,直接str.encode("目标编码"),只是变成了byte数据类型,不过编码就是目标编码。#2、python3,既然编码过程无变化,如果有需求,#str.encode("utf-8").decode("utf-8").encode("gbk")#这是为了明确转码过程,实际应用不大,因为unicode编码是万国码,需要对接本地码程序需求的话,直接转就行了

importsysprint(sys.getdefaultencoding()) #打印python环境的默认编码

s="你哈"

print(s.encode("gbk")) #unicode直接转gbk的输出结果

print(s.encode("utf-8")) #unicode直接转utf-8的输出结果(byte类型,编码正确)

print(s.encode("utf-8").decode("utf-8").encode("gbk")) #unicode直接转utf-8,再转为unicode,再转为gbk,(还是byte类型,编码正确)#经过完整流程后,与直接转gbk结果相同,这个就是为了证明流程、结果的正确#python3中,只有encode()方法以后,数据类型都是byte,编码是指定编码,无参就是默认编码 可以再转回字符串的。。。#decode()方法就行了,参数要根据实际参数传,不传可以,除非可以确定这个需要转回字符串的比byte类型的数据,就是默认编码,不然就异常。

s_to_gbk=s.encode("gbk").decode("gbk") #decode不写gbk,会报异常说,gbk不能转到响应目标编码,

print(s_to_gbk,type(s_to_gbk)) #证明转回了字符串类型,并且是gbk编码的#python3,在encode的时候除了转了编码,同时转了数据类型变为byte

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值