Python从0到100(三十六):字符和字符集基础知识及其在Python中的应用

在这里插入图片描述

1. 字符和字符集概述

字符(Character)是构成书面语言的基本元素,它包括但不限于各国家的文字、标点符号、图形符号和数字。字符集(Character set)则是一个包含多个字符的系统,用于统一管理和编码不同的字符。

常见字符集

  • ASCII:最早的字符集之一,包含128个字符,主要覆盖了英语字母、数字和一些特殊符号。
  • GB2312:中国的字符集标准,主要用于简体中文字符的编码。
  • GB18030:GB2312的扩展,支持更多的汉字和符号。
  • Unicode:一个旨在包含世界上所有书写系统字符的字符集,它通过统一的编码方案解决了多种字符集并存的问题。

编码方式

  • ASCII编码:每个字符使用1个字节表示。
  • Unicode编码:通常使用2个字节或更多,具体取决于所使用的Unicode转换格式(UTF)。

UTF-8

UTF-8是Unicode的一种实现方式,它是一种变长编码方式,可以根据需要使用1到4个字节来表示一个字符。这种编码方式的优势在于它对ASCII的兼容性,以及对不同语言字符的有效编码。

2. Python 3中的字符串类型

Python 3提供了两种基本的字符串类型,以适应不同的使用场景:

  • str:表示Unicode文本,是Python中处理文本的标准方式。
  • bytes:表示原始的二进制数据,常用于网络传输和文件操作。

3. str和bytes类型之间的转换

在Python中,字符串和字节类型可以通过编码和解码操作互相转换:

从str到bytes

  • 使用encode()方法将字符串转换为字节类型:
    s = 'abc'
    print(type(s))  # 输出:<class 'str'>
    b = s.encode()  # 编码为字节类型
    print(type(b))  # 输出:<class 'bytes'>
    

从bytes到str

  • 使用decode()方法将字节类型转换回字符串:
    b = b'abc'
    print(type(b))  # 输出:<class 'bytes'>
    s = b.decode()  # 解码为字符串
    print(type(s))  # 输出:<class 'str'>
    

注意事项

编码和解码过程中,必须使用相同的字符集,否则可能会导致乱码或数据损坏。

4. 实际应用示例

ASCII字符的转换

当处理ASCII字符时,可以直接将字符串转换为字节类型,因为ASCII字符在UTF-8编码中占用1个字节:

s = 'abcdefg'
b1 = bytes(s, 'ascii')  # 显式指定ASCII编码
print(b1)  # 输出:b'abcdefg'
print(b1[0])  # 输出字符'a'的ASCII值:97
print(b1[:3])  # 输出:b'abc'

非ASCII字符的转换

对于包含非ASCII字符的字符串,需要指定正确的编码方式,如UTF-8:

s = "我喜欢python,今年25岁"
b2 = bytes(s, encoding="utf-8")
print(b2)  # 输出:b'\xe6\x88\x91\xe5\x96\x9c\xe6\xac\xa2python\xef\xbc\x8c\xe4\xbb\x8a\xe5\xb9\xb425\xe5\xb2\x81'

编码和解码的完整示例

以下是从字符串到字节再到字符串的完整转换过程:

# 将字符串编码为字节
s = "我喜欢python,今年25岁"
b3 = s.encode("utf-8")
print(b3)  # 输出同上

# 将字节解码回字符串
b4 = b'\xe6\x88\x91\xe5\x96\x9c\xe6\xac\xa2python\xef\xbc\x8c\xe4\xbb\x8a\xe5\xb9\xb425\xe5\xb2\x81'
s_decoded = b4.decode("utf-8")
print(s_decoded)  # 输出:我喜欢python,今年25岁

通过这些示例,我们可以看到Python中字符串和字节类型转换的灵活性和重要性。正确地处理这些转换对于数据的存储、传输和处理至关重要。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Truenas scale入坑

家里有一台刚上大学时配的电脑&#xff0c;看着无用武之地&#xff0c;又还能用&#xff0c;于是想那它来搞个私有云nas。 一、选择想要入的坑 一开始对这块没什么了解和概念&#xff0c;最早是在旧主机上安装了个Ubuntu&#xff0c;然后再安装CassOS小尝试了下。可能CassOS里…

【Apache Doris】周FAQ集锦:第 9 期

【Apache Doris】周FAQ集锦&#xff1a;第 9 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…

eNSP-VLAN虚拟局域网

一、出现Vlan的原因 同一个局域网&#xff0c;使用交换机连接&#xff0c;虽然比集线器相连&#xff0c;降低了广播风暴&#xff0c;但是局域网主机数量够多的时候&#xff0c;正常的广播数据(arp、dhcp)也很影响网络性能&#xff0c;所以还需要进一步降低广播风暴——VLAN (图…

双指针算法:快速排序模拟实现

目录 1.思路解析 2&#xff1a;代码展示 1.思路解析 使用双指针pre和cur 指针cur用于检测符合条件的数据 cur和pre数据发生交换用于将符合条件的数据&#xff08;比key小&#xff09;向左扔 一轮循环结束时&#xff0c;以pre为分界点&#xff0c;除去key&#xff0c;pre左边的…

SpringMVC 的工作流程和详细解释

Spring MVC&#xff08;Model-View-Controller&#xff09;框架是基于经典的 MVC 设计模式构建的&#xff0c;用于开发 Web 应用程序。下面是 Spring Boot MVC 的工作流程和详细解释&#xff1a; 1.客户端发起请求 1.客户端&#xff08;通常是浏览器&#xff09;发起 HTTP 请求…

VUE Pinia状态持久化

效果 实现方法 插件&#xff1a;pinia-plugin-persistedstate 链接地址 具体操作 安装 npm i pinia-plugin-persistedstate 添加到 pinia 实例上 import { createPinia } from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstateconst pinia cre…

自动化设备上位机设计 一

目录 一 设计原型 二 后台代码 一 设计原型 二 后台代码 namespace 自动化上位机设计 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){}} }namespace 自动化上位机设计 {partial class Fo…

PDM与ERP物料编码技术在产品设计中的区别与应用

01 概 述 产品是企业赖以生存的基础&#xff0c;产品数据是企业最基本的也是最重要的数据&#xff0c;产品数据存在于产品设计、采购、生产、销售、服务、库存管理等全过程中。通过对产品设计数据进行编码&#xff0c;并增加采购、库存、生产、制造等属性信息&#xff0c;可以…

2.5 C#视觉程序开发实例1----设计一个IO_Manager

2.5 C#视觉程序开发实例1----设计一个IO_Manager 第一步目标&#xff1a; 1 实现获取IO触发信号Trig0 2 能够实现程序切换 3 图像处理后能够输出一个脉冲 1 IO 引脚定义 1.1 输入信号定义 1.2 输出信号定义 2 IO时序图 2.1 触发时序 2.2 切换程序时序图 3 IO_Manager.cs …

Android系统集成和使用FFmpeg

文章目录 前言FFmpeg源码下载交叉编译NDK下载x264编译源码下载编译 FFmpeg编译脚本 AOSP继承FFmpeg 前言 原生AOSP中并未继承FFmpeg&#xff0c;所以要想在android上使用&#xff0c;需要自己编译集成。 FFmpeg源码下载 git clone https://git.ffmpeg.org/ffmpeg.git目前最新…

云桌面运维工程师

一 深信服驻场工程师 1 深信服AC、AF、AD、NGAF、WOC Atrust、WAF项目实施经验者优先考虑。 负责云桌面POC测试 部署和配置&#xff1a;设置云桌面基础设施&#xff0c;包括虚拟化平台、云桌面管理软件和相关组件。确保正确配置网络、存储和安全设置。 用户体验&#xff1…

oracle用户过期/设置无限期用户/ORA-28001:the password has expired

oracle默认情况下&#xff0c;新建的账户只有180天的有效期&#xff0c;在有效期到期前一周就会报警。而一旦过了有效期&#xff0c;账户就会被锁定无法登录。所以为了方便起见&#xff0c;要修改oracle用户的有效期为无限。 1.查看用户密码的有效期设置&#xff0c;一般默认的…

如何解决滑块验证码 | 最佳滑块拼图验证码解决方案

你是否曾经在遇到滑块验证码时感觉像一个拼图大师&#xff1f;那种需要将拼图块完美地匹配到槽位中以证明你是人类的验证码&#xff1f;我也曾多次遇到过这些棘手的测试&#xff0c;虽然有点挑战性&#xff0c;但它们也是网络安全世界的一个迷人一瞥。在本指南中&#xff0c;我…

能保存到相册的风景视频在哪下载?下载风景视频网站分享

在当今以视觉为核心的时代&#xff0c;高清美丽的风景视频不仅能够丰富我们的日常生活&#xff0c;还能提供心灵上的慰藉。无论是为了制作视频项目&#xff0c;还是仅仅想要珍藏一些精美的风景画面&#xff0c;获取高质量的风景视频素材显得尤为重要。许多人可能会问&#xff1…

班迪录屏(Bandicam)7.0下载以及安装教程

最近有小伙伴私信我&#xff0c;问我有没有好用的录屏工具&#xff0c;今天给大家分享一个我一直在使用的录屏工具&#xff0c;也是解锁了V1P版本&#xff0c;绿色版打开就可以使用~ Bandicam录屏&#xff08;PC&#xff09; Bandicam录屏是一款专为捕捉屏幕精彩瞬间而设计的…

使用 iconfont.ttf文件保存多个图标文件,并且像文字一样使用代码绘制出来

先看演示效果 这里的多个图标其实是存储在 iconfont.ttf文件中 这个文件里面的图标对应的编码 显示代码 void CMFCApplication3Dlg::OnBnClickedOk() {// 加载字体文件CString fontPath = _T("C:\\Users\\35497\\Desktop\\test\\MFCApplication3\\font\\iconfont.ttf&qu…

测试引擎模拟接口实战

在上一章的内容中&#xff0c;我简单介绍了整个微服务的各个子模块&#xff0c;还封装了一些工具类。 当然&#xff0c;若还没完成上次内容的也可以点击右侧的传送门------传送门 EngineApplication 在开发测试引擎模拟接口之前&#xff0c;还需要给xxx-engine创建一个Sprin…

langchain框架轻松实现本地RAG

一 什么是RAG? RAG&#xff08;Retrieval-Augmented Generation&#xff09;是一种结合了检索和生成模型的方法&#xff0c;主要用于解决序列到序列的任务&#xff0c;如问答、对话系统、文本摘要等。它的核心思想是通过从大量文档中检索相关信息&#xff0c;然后利用这些信息…

【Android面试八股文】你是怎么保证Android设备的时间与服务器时间同步的?(使用NTP和TrueTime方案)

文章目录 一、网络时间协议(NTP)二、使用网络时间协议(NTP)2.1 使用系统提供的 NTP 服务器2.2 使用TrueTime2.2.1 引入TrueTime库2.2.2 初始化 TrueTime2.2.3 用法2.2.4 使用 TrueTime 获取时间2.2.4 自动更新时间2.2.5 注意事项二. 使用 HTTP 请求获取服务器时间2.1. 发送…