Python基础之编码(中文编码)

本文介绍了Python中关于中文编码的基础知识,包括Python 2和Python 3中字符串类型的差异,以及如何处理中文编码问题。在Python 3中,字符串是Unicode类型,避免了编码错误,而在Python 2中,需要通过指定编码进行解码和编码操作以处理中文。正确处理Python中文编码的方法包括保存文件为utf-8格式,并在Python 2中为中文字符串添加前缀u。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,介绍一下编码类型:
在这里插入图片描述
然后,再看一下编码类型的转换过程:
在这里插入图片描述
python程序是在内存中运行,因此应该处理的是Unicode类型的字符串,文件或终端中的各种编码方式,可以理解为py3中的Bytes类型。
Unicode只能在内存中使用
Bytes是在文件存储和网络数据传输中使用

记住我们的程序要处理的是Unicode类型

下面看一下py2和py3中字符串的类型:
py2:
在这里插入图片描述
py3:
在这里插入图片描述
看起来好像一样,都是str类型,其实对应的编码方式是不一样的,请看下图:
在这里插入图片描述
这样是否看出区别了呢?在py3中,str就是Unicode类型,所以py3中不会有中文编码的各种问题,声明一个str类型的中文字符串,程序即可直接进行处理;但是在py2中呢,str是对应的gbk、utf-8等类型,相当于编码后的Unicode,程序要处理的是Unicode类型,而你的中文字符串是gbk类型(随便选一个举例),这样程序自然就报错了。

py3:
s = “abc” #等价于py2的unicode类型,例如s=u"中国"
type(s) —str类型—>> unicode
s1=b"abc" —bytes类型—(gbk,utf-8…)

s.encode(“utf-8”)—>bytes类型
s.encode(“utf-8”).decode(“utf-8”)—>unicode类型

py2:
s = “中国” #等价于 py3的bytes类型
type(s) —str类型—>不是unicode,而是类似py3里面的bytes对象
s.decode(“utf-8”)—>unicode
s.decode(“utf-8”).encode(“utf-8”)类型—>str类型

这样看是否就很清晰了呢?也就是说你在py3中声明一个str类型变量,这个变量支持的操作是编码操作,即s.encode(“utf-8”);
而你在py2中声明一个str类型变量,这个变量支持的操作是解码操作,即s.decode(“utf-8”)

那么,有中文的情况下应该怎么使用才不会报错呢?
py2:
1 文件要存为utf-8
2 文件第一行声明为(下面这几种都可以,随便选一种):
#encoding=utf-8
#coding=utf-8
#coding:utf-8
#coding:UTF-8
3 所有的中文前面加u,表示unicode

py3:
1 文件要存为utf-8
2 声明可以不加,加上也没问题
3 中文前面不用加u,加了也没事

常用终端的编码类型:
CMD是gbk编码
记事本默认ANSI编码(gbk)

注:
1.读文件 读到的都是Unicode
2.编码和解码要用相同的字符集(用什么编码就用什么解码)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值