一学就废|Python基础碎片,字符串编码

Unicode 万国码

        在 Python 3 中,字符串由 Unicode 表示,而不是字节。ASCII 码是定义字符数字代码的最著名的标准。数字值最初只定义 128 个字符,因此 ASCII 只包含控制代码、数字、小写字母、大写字母等。然而,我们不足以表示世界各地存在的重音字符、汉字或表情符号等字符。因此,Unicode 被开发来解决这个问题。它定义了代码点来表示各种字符,如 ASCII,但字符数多达 1,111,998 个。

String 字符串

        在 Python 2 中,字符串以字节表示,而不是 Unicode。Python 提供了不同类型的字符串,例如 Unicode 字符串、原始字符串等。在这种情况下,如果我们想声明一个 Unicode 字符串,我们为字符串文字添加 u 前缀。

s = 'Café'  # byte string
s
'Caf\xc3\xa9'type(s)
<type 'str'>u = u'Café' # unicode string
u
u'Caf\xe9'type(u)
<type 'unicode'>

        在 Python 3 中,字符串用 Unicode 表示。如果我们想表示字节字符串,我们为字符串文字添加 b 前缀。请注意,早期的 Python 版本(3.0-3.2)不支持 u 前缀。为了减轻从 Python 2 迁移 Unicode 感知应用程序的痛苦,Python 3.3 再次支持字符串文字的 u 前缀。

s = 'Café'
type(s)
<class 'str'>s
'Café's.encode('utf-8')
b'Caf\xc3\xa9's.encode('utf-8').decode('utf-8')
'Café'

Characters 字符

        Python 2 将所有字符串字符作为字节。在这种情况下,字符串的长度可能不等于字符的数量。例如,Café 的长度是 5,而不是 4,因为 é 被编码为 2 字节的字符。

s= 'Café'
print([_c for _c in s])
['C', 'a', 'f', '\xc3', '\xa9']len(s)
5s = u'Café'
print([_c for _c in s])
[u'C', u'a', u'f', u'\xe9']len(s)
4

        Python 3 将所有字符串字符视为 Unicode 码点。字符串的长度始终等同于字符的数量。

s = 'Café'
print([_c for _c in s])
['C', 'a', 'f', 'é']len(s)
4bs = bytes(s, encoding='utf-8')
print(bs)
b'Caf\xc3\xa9'len(bs)
5

移植 unicode(s, ‘utf-8’)

        unicode()内置函数在 Python 3 中被删除,那么转换表达式 unicode(s,'utf-8')的最佳兼容方法是什么?可以在Python2和Python3中通用呢?

# python2 版本
s = 'Café'
unicode(s, 'utf-8')
u'Caf\xe9's.decode('utf-8')
u'Caf\xe9'unicode(s, 'utf-8') == s.decode('utf-8')
True# python3 版本
s = 'Café'
s.decode('utf-8')
AttributeError: 'str' object has no attribute 'decode'

        以上栗子可以看到decode()不能对Unicode编码的字符串进行反编码。

ord函数

        ord 是一个强大的内置函数,它用于返回给定字符的Unicode数值,即该字符在Unicode表中的位置。

s = u'Café'
for _c in s: print('U+%04x' % ord(_c))U+0043
U+0061
U+0066
U+00e9u = '中文'
for _c in u: print('U+%04x' % ord(_c))U+4e2d
U+6587

Encoding 编码

        Unicode 字符串转换为Byte字节即为encoding编码。

s = u'Café'
type(s.encode('utf-8'))
<class 'bytes'>

        相反,如果Byte字节转为Unicode字符为decoding反编码。

s = bytes('Café', encoding='utf-8')
s.decode('utf-8')
'Café'

        当Byte字节字符串无法解码为 Unicode 字符串时,Python 会引发 UnicodeDecodeError的异常。如果我们想避免这个异常,我们可以在解码中传递替换、反斜杠替换或忽略错误的参数。

u = b"\xff"
u.decode('utf-8', 'strict')Traceback (most recent call last):File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte# use U+FFFD, REPLACEMENT CHARACTER
u.decode('utf-8', "replace")
'\ufffd'# inserts a \xNN escape sequence
u.decode('utf-8', "backslashreplace")
'\\xff'# leave the character out of the Unicode result
u.decode('utf-8', "ignore")
''

定义长字符串

        以下是定义多行长字符串的几种方法。

# 普通单引号
s = 'This is a very very very long python string'# 反斜杠末尾断行
s = "This is a very very very " \"long python string"# 使用小括号
s = ("This is a very very very ""long python string"
)# 使用+号连接
s = ("This is a very very very " +"long python string"
)# 使用三引号加反斜杠
s = '''This is a very very very \
long python string'''

学废了嘛,如有错误,请指正,感谢。

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

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

相关文章

npm list @types/node 命令用于列出当前项目中 @types/node 包及其依赖关系

文章目录 作用示例常用选项示例命令注意事项 1、实战举例**解决方法**1. **锁定唯一的 types/node 版本**2. **清理依赖并重新安装**3. **设置 tsconfig.json 的 types**4. **验证 Promise 类型支持** **总结** npm list types/node 命令用于列出当前项目中 types/node 包及其…

Qt--命令行终端程序开发

提示&#xff1a;本文为学习记录&#xff0c;若有错误&#xff0c;请联系作者&#xff0c;谦虚受教。 文章目录 前言一、头文件二、cpp文件三、使用流程如图所示 总结 前言 Constant dropping wears the stone. 一、头文件 #ifndef TERMINALWIDGET_H #define TERMINALWIDGET_…

【Linux】常用命令(2.6万字汇总)

文章目录 Linux常用命令汇总1. 基础知识1.1. Linux系统命令行的含义1.2. 命令的组成 2. 基础知识2.1. 关闭系统2.2. 关闭重启2.3. 帮助命令&#xff08;help&#xff09;2.4. 命令说明书&#xff08;man&#xff09;2.5. 切换用户&#xff08;su&#xff09;2.6.历史指令 3.目录…

video2gif容器构建指南

一、介绍 1.项目概述 Video2Gif 项目旨在提供一种便捷的方式&#xff0c;让用户能够将视频中的精彩片段快速转换为 GIF 动画。GIF 动画因其循环播放、文件体积小等特点&#xff0c;在社交媒体、聊天工具中广泛应用&#xff0c;用于表达情感、分享趣事等。 2.核心功能 视频导…

《人工智能网络安全现状(2024)》深度解读:机遇、挑战与应对策略

在当今数字化浪潮汹涌澎湃的时代&#xff0c;人工智能&#xff08;AI&#xff09;与网络安全已然深度交融&#xff0c;二者相互作用所塑造的发展态势正深刻重塑着我们的信息安全格局。《人工智能网络安全现状&#xff08;2024&#xff09;》这份报告恰似一盏明灯&#xff0c;为…

JVM(二、类加载系统)

类加载器 JVM的类加载通过classLoader及其子类完成的 类加载器&#xff1a; 启动类加载器&#xff08;Bootstrap ClassLoader&#xff09;&#xff1a; 负责加载存放在 <JAVA_HOME>\lib 目录中的核心类库&#xff0c;如rt.jar、resources.jar等&#xff08;或者被 -Xboot…

九、HttpMessageConverter

文章目录 1. RequestBody2. RequestEntity3. ResponseBody4. SpringMVC处理json5. SpringMVC处理ajax6. RestController注解7. ResponseEntity 1. RequestBody 2. RequestEntity 3. ResponseBody 4. SpringMVC处理json 5. SpringMVC处理ajax 6. RestController注解 7. Response…

PaddleYOLO目标检测训练(集成SwanLab可视化全过程)

PaddleYolo 是飞桨&#xff08;PaddlePaddle&#xff09;框架下的一个目标检测库&#xff0c;主要用于图像和视频中的物体检测。PaddleYOLO包含YOLO系列模型的相关代码&#xff0c;支持YOLOv3、PP-YOLO、PP-YOLOv2、PP-YOLOE、PP-YOLOE、RT-DETR、YOLOX、YOLOv5、YOLOv6、YOLOv…

移动电源测试中最核心的测试项目有哪些?-纳米软件

移动电源在如今的生活中扮演着重要的角色&#xff0c;对其进行准确的测试至关重要。以下是移动电源测试中一些较为核心的测试项目&#xff1a; 一、容量测试 内部电池容量测试&#xff1a;通过设计大量整机及内部电池容量测试实验&#xff0c;可以准确了解移动电源的实际容量…

跟着尚硅谷学vue2—进阶版4.0—Vuex1.0

5. Vuex 1. 理解 Vuex 1. 多组件共享数据-全局事件总线实现 红线是读&#xff0c;绿线是写 2. 多组件共享数据-vuex实现 vuex 不属于任何组件 3. 求和案例-纯vue版 核心代码 1.Count.vue <template><div><h1>当前求和为&#xff1a;{{ sum }}</h1&…

ChatGPT 搜索 vs Google 搜索

原文&#xff1a;Amanda Caswell - 2024.11.01 随着 OpenAI 推出的实时搜索功能&#xff0c;ChatGPT 正在逐步成为像 Google 这样的传统搜索引擎的竞争对手。ChatGPT 以其对话式的回答方式而闻名&#xff0c;它能够在没有广告干扰的情况下提供实时的上下文信息。 我迫不及待地…

LeetCode【0017】电话号码的字母组合

本文目录 1 中文题目2 最优解法&#xff1a;迭代法2.1 方法思路2.2 Python代码2.3 复杂度分析 3 题目总结 1 中文题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下&#xff08;与电话按键相…

iOS 18.2 重磅更新:6个大动作

根据外媒报道&#xff0c;iOS 18.2迎来重磅更新&#xff0c;将带来6个大动作&#xff0c;这是一次非常实用的更新。不过要注意的是&#xff0c;其中涉及到AI的功能&#xff0c;国行iPhone 暂时还不可用&#xff0c;只能等审核通过了。 1&#xff0c;Safari下载进度 过去通过S…

《TCP/IP网络编程》学习笔记 | Chapter 9:套接字的多种可选项

《TCP/IP网络编程》学习笔记 | Chapter 9&#xff1a;套接字的多种可选项 《TCP/IP网络编程》学习笔记 | Chapter 9&#xff1a;套接字的多种可选项套接字可选项和 I/O 缓冲大小套接字多种可选项getsockopt & setsockoptSO_SNDBUF & SO_RCVBUF SO_REUSEADDR发生地址绑定…

D66【python 接口自动化学习】- python基础之数据库

day66 SQL-DQL-排序分页 学习日期&#xff1a;20241112 学习目标&#xff1a;MySQL数据库-- 135 SQL-DQL-排序分页 学习笔记&#xff1a; 结果查询 结果分页限制 总结 排序和分页限制的语法 2. 关键字总结&#xff1a;

Groovy有哪些官方文档和教程可以学习?

Groovy Language Documentation&#xff1a; 这是Groovy的官方文档&#xff0c;提供了详细的语言规范、教程和指南。您可以从这里下载JavaDoc和在线文档&#xff0c;以及获取关于如何开始使用Groovy的指导。[Groovy Language Documentation][1] Groovy官方教程&#xff1a; 官…

LeetCode 3.无重复字符的最长子串

LeetCode 3.无重复字符的最长子串 思路&#x1f9d0;&#xff1a; 使用滑动窗口哈希表&#xff0c;哈希表映射每一个字符串&#xff0c;左右指针表示当前区间&#xff0c;当出现一个字符串那么就将哈希表1&#xff0c;右指针移动&#xff0c;当哈希表对应位置大于1时&#xff0…

验证码处理在自动化测试中的应用

在进行自动化测试时&#xff0c;处理验证码是一项常见的挑战&#xff0c;特别是图形验证码。每次刷新都会生成新的验证码&#xff0c;因此我们可以采用以下两种方法来获取验证码&#xff1a; 获取验证码图片链接&#xff1a;例如 src"http://example.com/getcaptcha/123&q…

云计算在智能交通系统中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 云计算在智能交通系统中的应用 云计算在智能交通系统中的应用 云计算在智能交通系统中的应用 引言 云计算概述 定义与原理 发展历…

全球碳循环数据集(2000-2023)包括总初级生产力、生态系统净碳交换和生态系统呼吸变量

全球碳循环数据集&#xff08;2000-2023&#xff09; 数据介绍 PFTs_XGB FLUX 是一个基于 XGBOOST 机器学习模型的全球碳循环数据集。该数据集通过对全球植被功能类型&#xff08;PFTs&#xff09;的分类&#xff0c;结合了 FLUXNET、AmeriFlux 和 ICOS 通量站点的现场观测数据…