百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

站长在线:Python中字符串编码转换encode编码和decode解码详解

liuian 2025-03-01 14:38 37 浏览

欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《Python中字符串编码转换:encode编码和decode解码详解》。本知识点主要内容有:常用编码简介、使用encode()方法编码、使用decode()方法解码、Unicode和UTF-8的关系说明。


我们在《Python中的基本数据类型》中,学习过:字符串就是连续的字符序列,可以是计算机能够表示的一切字符的集合。字符串属于不可变序列,通常用单引号(' ')、双引号(" ")或者三引号(''' '''或""" """)括起来。还提到了字符串常用的转义字符。今天主要来讲解一下字符串编码转换。

1、常用编码简介

1.1、ASCII,即美国标准信息交换码,1967年制定,主要用于美国和西欧,它仅对10个数字、26个大写英文字母、26个小写英文字母,以及一些其他符号进行了编码。ASCII码最多只能表示256个符号,每个字符占一个字节(bytes)。

1.2、GB2312,国家简体中文字符集,1980年制定,兼容ASCII。每个中文字符占两个字节。

1.3、Unicode,国际标准组织统一标准字符集,1991年制定。Unicode包含了跟全球所有国家编码的映射关系。每个字符占两个字节。

1.4、UTF-8,国际通用编码,制定于1992年,对全世界所有国家用到的字符都进行了编码。UTF-8采用一个字节表示英文字符,用三个字节表示中文。在Python3.x中默认的编码就是UTF-8编码,这就有效的解决了中文乱码的问题。

1.5、GBK,为GB2312的扩展字符集,兼容GB2312,支持繁体字,1995年制定。每个中文字符占两个字节。

在Python中,有两种常用的字符串类型,分别为str和bytes。其中,str表示Unicode字符(ASCII或者其他);bytes表示二进制数据(包括编码的文本)。这两种类型的字符串不能拼接在一起使用。通常情况下,str在内存中以Unicode表示,一个字符对应若干个字节。但是如果在网络上传输,或者保存到磁盘上,就需要把str转换为字节类型,即bytes类型。

bytes类型的数据是带有b前缀的字符串(用单引号或双引号表示),例如,b'\xd2\xb0'和b'QQ'都是bytes类型的数据。

str和bytes之间可以通过encode()和decode()方法进行转换,这两个方法是互为逆过程。下面分别进行介绍。

2、使用encode()方法编码

encode()方法为str对象的方法,用于将字符串转换为二进制数据(即bytes),也称为“编码”,其语法格式如下:

str.encode([encoding="utf-8"][,errors="strict"])

参数说明如下:

str:表示要进行转换的字符串。

encoding="utf-8":可选参数,用于指定进行转码时采用的字符编码,默认为UTF-8,如果想使用简体中文,也可以设置为gb2312。当只有这一个参数时,也可以省略前面的“encoding=”,直接写编码。

errors="strict":可选参数,用于指定错误处理方式,其可选择值可以是strict(遇到非法字符就抛出异常)、ignore(忽略非法字符)、replace(用“?”替换非法字符)或xmlcharrefreplace(使用XML的字符引用)等,默认值为strict。

说明

在使用encode()方法时,不会修改原字符串,如果需要修改原字符串,需要对其进行重新赋值。

例如,定义一个名称为a的字符串,内容为“星星之火可以燎原”,然后使用encode()方法将其采用GBK编码转换为二进制数,并输出原字符串和转换后的内容,代码如下:

a = '星星之火可以燎原'
b = a.encode('gbk')      # 将gbk编码转换为二进制数据,不处理异常 
print('原字符串:',a)    # 输出原字符串 
print('转换后:',b)      # 输出转换后的二进制数据

上面的代码执行后,将显示以下内容。

原字符串: 星星之火可以燎原
转换后: b'\xd0\xc7\xd0\xc7\xd6\xae\xbb\xf0\xbf\xc9\xd2\xd4\xc1\xc7\xd4\xad'
>>> 

如果采用UTF-8编码,转换后的二进制数据为:

a = '星星之火可以燎原'
b = a.encode('utf-8')    # 将utf-8编码转换为二进制数据,不处理异常 
print('原字符串:',a)    # 输出原字符串 
print('转换后:',b)      # 输出转换后的二进制数据
原字符串: 星星之火可以燎原
转换后: b'\xe6\x98\x9f\xe6\x98\x9f\xe4\xb9\x8b\xe7\x81\xab\xe5\x8f\xaf\xe4\xbb\xa5\xe7\x87\x8e\xe5\x8e\x9f'
>>> 

3、使用decode()方法解码

decode()方法为bytes对象的方法,用于将二进制数据转换为字符串,即将使用encode()方法转换的结果再转换为字符串,也称为“解码”。

其语法格式如下:

bytes.decode([encoding="utf-8"][,errors="strict"])

参数说明如下:

bytes:表示要进行转换的二进制数据,通常是encode()方法转换的结果。

encoding="utf-8":可选参数,用于指定进行解码时采用的字符编码,默认为UTF-8,如果想使用简体中文,也可以设置为gb2312。当只有这一个参数时,也可以省略前面的“encoding=”,直接写编码。

errors="strict":可选参数,用于指定错误处理方式,其可选择值可以是strict(遇到非法字符就抛出异常)、ignore(忽略非法字符)、replace(用“?”替换非法字符)或xmlcharrefreplace(使用XML的字符引用)等,默认值为strict。

站长在线提醒您:在使用decode()方法时,不会修改原字符串,如果需要修改原字符串,需要对其进行重新赋值。


例如,将上面示例中编码后得到二进制数据(保存在变量b中)进行解码,可以使用下面的代码:

a = b'\xd0\xc7\xd0\xc7\xd6\xae\xbb\xf0\xbf\xc9\xd2\xd4\xc1\xc7\xd4\xad'
print('解码后:',a.decode("gbk"))  # 对进行制数据进行解码

上面的代码执行后,将显示以下内容:

解码后: 星星之火可以燎原
>>> 

同样的,我们选择utf-8的字符串也是可以的

a = b'\xe6\x98\x9f\xe6\x98\x9f\xe4\xb9\x8b\xe7\x81\xab\xe5\x8f\xaf\xe4\xbb\xa5\xe7\x87\x8e\xe5\x8e\x9f'
print('解码后:',a.decode("utf-8"))  # 对进行制数据进行解码

上面的代码执行后,将显示以下内容:

解码后: 星星之火可以燎原
>>> 

站长在线提醒您:在设置解码采用的字符编码时,需要与编码时采用的字符编码一致。

本文相关知识扩展阅读:

4、Unicode和UTF-8的关系说明

Unicode直接支持全球所有语言,包含了跟全球所有国家编码的映射关系。

Unicode解决了字符和二进制的对应关系,但是使用unicode的每一个字符,都占用了两个字节,太浪费空间。如unicode表示“Python”需要12个字节才能表示,比原来ASCII表示增加了1倍。

由于计算机的内存比较大,并且字符串在内容中表示时也不会特别大,所以内容可以使用unicode来处理,但是存储和网络传输时一般数据都会非常多,那就不能这样传输了。

为了解决存储和网络传输的问题,出现了Unicode Transformation Format,学术名UTF,即:对unicode中的进行格式转换,以便于在存储和网络传输时可以节省空间!

UTF-8: 使用1、2、3、4个字节表示所有字符;优先使用1个字符、无法满足则使增加一个字节,最多4个字节。英文占1个字节、欧洲语系占2个、东亚语系占3个,其它及特殊字符占4个。

UTF-16: 使用2、4个字节表示所有字符;优先使用2个字节,否则使用4个字节表示。

UTF-32: 使用4个字节表示所有字符。

总结:UTF 是为unicode编码 设计 的一种在存储和传输时节省空间的编码方案。

到此为止,本文学习的是《Python中字符串编码转换详解》。本知识点主要内容有:常用编码简介、使用encode()方法编码、使用decode()方法解码、Unicode和UTF-8的关系说明。就讲解完毕了,有问题的可以给我留言哦!

关注【站长在线】,让新手小白系统的零基础学习Python,感谢你对我们的关注,点赞,转发,评论哦!

相关推荐

搭建一个20人的办公网络(适用于20多人的小型办公网络环境)

楼主有5台机上网,则需要一个8口路由器,组网方法如下:设备:1、8口路由器一台,其中8口为LAN(局域网)端口,一个WAN(广域网)端口,价格100--400元2、网线N米,这个你自己会看了:)...

笔记本电脑各种参数介绍(笔记本电脑各项参数新手普及知识)

1、CPU:这个主要取决于频率和二级缓存,频率越高、二级缓存越大,速度越快,现在的CPU有三级缓存、四级缓存等,都影响相应速度。2、内存:内存的存取速度取决于接口、颗粒数量多少与储存大小,一般来说,内...

汉字上面带拼音输入法下载(字上面带拼音的输入法是哪个)

使用手机上的拼音输入法打成汉字的方法如下:1.打开手机上的拼音输入法,在输入框中输入汉字的拼音,例如“nihao”。2.根据输入法提示的候选词,选择正确的汉字。例如,如果输入“nihao”,输...

xpsp3安装版系统下载(windowsxpsp3安装教程)

xpsp3纯净版在采用微软封装部署技术的基础上,结合作者的实际工作经验,融合了许多实用的功能。它通过一键分区、一键装系统、自动装驱动、一键设定分辨率,一键填IP,一键Ghost备份(恢复)等一系列...

没有备份的手机数据怎么恢复

手机没有备份恢复数据方法如下1、使用数据线将手机与电脑连接好,在“我的电脑”中可以看到手机的盘符。  2、将手机开启USB调试模式。在手机设置中找到开发者选项,然后点击“开启USB调试模式”。  3、...

电脑怎么激活windows11专业版

win11专业版激活方法有多种,以下提供两种常用的激活方式:方法一:使用激活密钥激活。在win11桌面上右键点击“此电脑”,选择“属性”选项。进入属性页面后,点击“更改产品密钥或升级windows”。...

华为手机助手下载官网(华为手机助手app下载专区)

华为手机助手策略调整,已不支持从应用市场下载手机助手,目前华为手机助手是需要在电脑上下载或更新手机助手到最新版本,https://consumer.huawei.com/cn/support/his...

光纤线断了怎么接(宽带光纤线断了怎么接)

宽带光纤线断了可以重接,具体操作方法如下:1、光纤连接的时候要根据束管内,同色相连,同芯相连,按顺序进行连接,由大到小。一般有三种连接方法,分别是熔接、活动连接和机械连接。2、连接的时候要开剥光缆,抛...

深度操作系统安装教程(深度操作系统安装教程图解)
  • 深度操作系统安装教程(深度操作系统安装教程图解)
  • 深度操作系统安装教程(深度操作系统安装教程图解)
  • 深度操作系统安装教程(深度操作系统安装教程图解)
  • 深度操作系统安装教程(深度操作系统安装教程图解)
win7旗舰版和专业版区别(win7旗舰版跟专业版)

1、功能区别:Win7旗舰版比专业版多了三个功能,分别是Bitlocker、BitlockerToGo和多语言界面; 2、用途区别:旗舰版的功能是所有版本中最全最强大的,占用的系统资源,...

万能连接钥匙(万能wifi连接钥匙下载)

1、首先打开wifi万能钥匙软件,若手机没有开启WLAN,就根据软件提示打开WLAN开关;2、打开WLAN开关后,会显示附近的WiFi,如果知道密码,可点击相应WiFi后点击‘输入密码’连接;3、若不...

雨林木风音乐叫什么(雨林木风是啥)

雨林木风的创始人是陈年鑫先生。陈年鑫先生于1999年创立了雨林木风公司,其初衷是为满足中国市场对高品质、高性能电脑的需求。在陈年鑫先生的领导下,雨林木风以技术创新、产品质量和客户服务为核心价值,不断推...

aics6序列号永久序列号(aics6破解序列号)

关于AICS6这个版本,虽然是比较久远的版本,但是在功能上也是十分全面和强大的,作为一名平面设计师的话,AICS6的现有的功能已经能够应付几乎所有的设计工作了……到底AICC2019的功能是不是...

win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
  • win7正在启动windows 卡住(win7正在启动windows卡住了 进入安全模式)
手机可以装电脑系统吗(手机可以装电脑系统吗怎么装)

答题公式1:手机可以通过数据线或无线连接的方式给电脑装系统。手机安装系统需要一定的技巧和软件支持,一般需要通过数据线或无线连接的方式与电脑连接,并下载相应的软件和系统文件进行安装。对于大部分手机用户来...