字符串编码转换

news2024/11/8 15:39:31

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

最早的字符串编码是美国标准信息交换码,即ASCII码。它仅对10个数字、26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASCII码最多只能表示256个符号,每个字符占一个字节。随着信息技术的发展,各国的文字都需要进行编码,于是出现了GBK、GB2312、UTF-8编码等。其中GBK和GB2312是我国制定的中文编码标准,使用一个字节表示英文字母,2个字节表示中文字符。而UTF-8是国际通用的编码,对全世界所有国家需要用到的字符都进行了编码。UTF-8采用一个字节表示英文字符、3个字节表示中文。在Python 3.X中,默认采用的编码格式为UTF-8,采用这种编码有效地解决了中文乱码的问题。

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

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

str类型和bytes类型之间可以通过encode()和decode()方法进行转换,这两个方法是互逆的过程。

1  使用encode()方法编码

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

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

参数说明:

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

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

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

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

例如,定义一个名称为verse的字符串,内容为“野渡无人舟自横”,然后使用endoce()方法将其采用GBK编码转换为二进制数,并输出原字符串和转换后的内容,代码如下:

verse = '野渡无人舟自横'

byte = verse.encode('GBK')           # 采用GBK编码转换为二进制数据,不处理异常

print('原字符串:',verse)              # 输出原字符串(没有改变)

print('转换后:',byte)               # 输出转换后的二进制数据

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

原字符串: 野渡无人舟自横

转换后: b'\xd2\xb0\xb6\xc9\xce\xde\xc8\xcb\xd6\xdb\xd7\xd4\xba\xe1'

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

b'\xe9\x87\x8e\xe6\xb8\xa1\xe6\x97\xa0\xe4\xba\xba\xe8\x88\x9f\xe8\x87\xaa\xe6\xa8\xaa'

2  使用decode()方法解码

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

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

参数说明:

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

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

注意:在设置解码采用的字符编码时,需要与编码时采用的字符编码一致。

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

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

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

print('解码后:',byte.decode("GBK"))  # 对进行制数据进行解码

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

解码后: 野渡无人舟自横

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1714764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

贪心(临项交换)+01背包,蓝桥云课 搬砖

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 0搬砖 - 蓝桥云课 (lanqiao.cn) 二、解题报告 1、思路分析 将物品按照w[i] v[i]升序排序然后跑01背包就是答案 下面证明:(不要问怎么想到的,做题多了就能想到&#xff…

总负债20.79亿,银行借款在增加,经营所得现金在减少,累计亏损在增加,易点云披露其风险(四)

来源:猛兽财经 作者:猛兽财经 全文共二十五章,总计6万字。 由于篇幅所限,分为(一)到(五)篇发布。 本文为《负债20.79亿,银行借款在增加,经营所得现金在减少,易点云披露风险》&am…

力扣爆刷第146天之贪心算法五连刷

力扣爆刷第146天之贪心算法五连刷 文章目录 力扣爆刷第146天之贪心算法五连刷总结一、455. 分发饼干二、376. 摆动序列三、53. 最大子数组和四、122. 买卖股票的最佳时机 II五、5. 跳跃游戏 总结 贪心算法的本质就是选择每一阶段的局部最优,从而达到全局最优。 一…

使用手机短信恢复软件,完成从新手到专家的进阶之路

由于各种原因,如误删、手机设备损坏等,我们可能会面临重要短信丢失的风险。现在市面上有许多手机短信恢复软件可以帮助我们解决这个问题,但从新手到专家的进阶之路并非一蹴而就的过程,它需要耐心、实践和不断地学习。以下是一篇关…

c++编程(15)——list的模拟实现

欢迎来到博主的专栏——c编程 博主ID:代码小豪 文章目录 前言list的数据结构list的默认构造尾插与尾删iterator插入和删除构造、析构、赋值copy构造initializer_list构造operator 析构函数 前言 受限于博主当前的技术水平,暂时还不能模拟实现出STL当中用…

HTTP报文

HTTP报文 报文流 HTTP报文是在HTTP引用程序之间发送的数据块,这些数据块以一种文本形式的元信息开头,这些信息描述了报文的内容和含义,后面跟着可选的数据部分,这些报文在客户端,服务器和代理之间流动。 报文流入源…

Java事务入门:从基础概念到初步实践

Java事务入门:从基础概念到初步实践 引言1. Java事务基础概念1.1 什么是事务?1.2 为什么需要事务? 2. Java事务管理2.1 JDBC 的事务管理2.2 Spring 事务管理2.2.1 Spring JDBC2.2.1.1 添加 Spring 配置2.2.1.2 添加业务代码并测试验证 2.2.2…

在做题中学习(62):矩阵区域和

1314. 矩阵区域和 - 力扣(LeetCode) 解法:二维前缀和 思路:读题画图才能理解意思:dun点点的是mat中的一个数,而要求的answer同位置的数 以点为中心上下左右延长 k 个单位所围成长方形的和。 因为最后answ…

拷贝构造、移动构造、拷贝赋值、移动赋值

最近在学习C的拷贝构造函数时发现一个问题:在函数中返回局部的类对象时,并没有调用拷贝构造函数。针对这个问题,查阅了一些资料,这里记录整理一下。 调用拷贝构造函数的三种情况: ① 用一个类去初始化另一个对象时&a…

PLC自动化行业的发展前景好吗?

第一先说plc的薪资: 整体的平均薪资还是非常可观的,在1.3w/月左右。 当然PLC是需要经验积累的,尤其需要拥有大型的系统设计经验,那将会在PLC以至于自动化行业都会吃的开。所以待遇是与自身的经验,能力,所在…

Java设计模式:享元模式实现高效对象共享与内存优化(十一)

码到三十五 : 个人主页 目录 一、引言二、享元设计模式的概念1. 对象状态的划分2. 共享机制 三、享元设计模式的组成四、享元设计模式的工作原理五、享元模式的使用六、享元设计模式的优点和适用场景结语 [参见]: Java设计模式:核心概述&…

GDPU Java 天码行空13

(一)实验目的 1、掌握JAVA中与网络程序开发相关的知识点; 2、理解并掌握网络编程开发思想及方法; 3、熟悉项目开发的分包方法和依据; 4、实现聊天室中客服端和服务器端的实现方法; 5、熟悉多线程程序开发方…

第五届武汉纺织大学ACM程序设计竞赛 个人题解(待补完)

前言: 上周周日教练要求打的一场重现赛,时长五个小时,题目难度还行,除了部分题目前我还写不出来之外,大部分题都写完或补完了,这边给出比赛链接和我的代码(有些是队友的)和题解。 正…

工作中有哪些超级好用的C/C++程序库?

视频和讲义发布在这里: B站链接

Spring框架温习

Spring Spring是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 Spring 特点: 轻量级、控制反转、面向切面、容器、框架集合 Spring 核心组件: Spring 常用模块&…

Leecode热题100---二分查找--4:寻找两个正序数组的中位数

题目: 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 解法1、暴力解法(归并) 思路: 合并 nums1,nums2 为第三个数组 排序第三个数…

亚马逊VC账号产品热销,在美国哪些智能小家电产品最好卖?

亚马逊VC账号产品在美国市场的热销,反映了消费者对于特定智能小家电产品的强烈需求。智能小家电产品因其实用性、便捷性和科技感,近年来在美国市场备受追捧。 以下是一些在亚马逊VC账号上热销的智能小家电产品: 智能扫地机器人 这类产品在美…

【传知代码】自监督高效图像去噪(论文复现)

前言:在数字化时代,图像已成为我们生活、工作和学习的重要组成部分。然而,随着图像获取方式的多样化,图像质量问题也逐渐凸显出来。噪声,作为影响图像质量的关键因素之一,不仅会降低图像的视觉效果&#xf…

STM32读写内部FLASH读取芯片id

文章目录 读写内部Flash接线程序编写测试效果补充 读取芯片id代码编写 读写内部Flash 接线 程序编写 首先使用ThisFlash.c来写入flash的基本操作,写入、读取、擦除,然后使用Store.c配合数组来进行主存与flash的交互 ThisFlash.c #include "stm32…

Spring Cloud Gateway 集成 Nacos、Knife4j

目录 1、gateway网关配置1.1 pom 配置2.2 配置文件1.3 yaml 配置 2、其他服务配置2.1 pom 配置2.2 配置文件2.3 yaml 配置 3、界面访问4、其他 官方文档地址:Spring Cloud Gateway集成Knife4j 官方完整源码:https://gitee.com/xiaoym/swagger-bootstrap-…