IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python使用日常备忘录 -> 正文阅读

[Python知识库]python使用日常备忘录

字符串编码

python3和python2的一个主要差异就在于字符编码,在python2中声明的字符串默认是bytes字节流,而在python3中声明的字符串默认是unicode字符串,我们用以下代码进行示例

# if using python2
str_raw = "我们爱编程"
str_bytes = b"我们爱编程"
str_unicode = u"我们爱编程"
print(str_raw) # 输出 '我们爱编程'
print(str_bytes) # 输出 '我们爱编程'
print(str_unicode) # 输出 '我们爱编程'
print(type(str_raw)) # 输出 <type 'str'>
print(type(str_bytes)) # 输出 <type 'str'>
print(type(str_unicode)) # 输出 <type 'unicode'>

# if using python3
str_raw = "我们爱编程" 
str_bytes = b"我们爱编程" # 会报错 SyntaxError: bytes can only contain ASCII literal characters.
str_bytes = b"we love programming" # 输出 b'we love programming'
str_unicode = u"我们爱编程" 
print(str_raw) # 输出 '我们爱编程'
print(str_unicode) # 输出 '我们爱编程'
print(type(str_raw)) # 输出 <class 'str'>
print(type(str_unicode)) # 输出 <class 'str'>
print(type(str_bytes)) # 输出 <class 'bytes'>

从这个例子中,我们知道在python2中声明的字符串默认是以bytes的形式存储的,如果用交互式终端去打印python2的字符,那么会显示如下

>>> str_raw = "我们爱编程"
>>> str_raw
'\xe6\x88\x91\xe4\xbb\xac\xe7\x88\xb1\xe7\xbc\x96\xe7\xa8\x8b'

而python3中声明的字符串默认以unicode形式储存,如果用交互式终端去打印的话,那么显示如下:

>>> str_raw = "我们爱编程"
>>> str_raw
'我们爱编程'

这里需要提一嘴的是,unicode是字符集的编码,而utf-8是unicode的其中一种编码实现(此外还有utf-16等)。然而unicode作为一种能包含100万符号以上的字符集,其编码存在一定的冗余,比如严的 Unicode 是十六进制数4E25,转换成二进制数足足有15位(100111000100101),不利于数据持久化保存和传输,因此需要编码成字节流bytes进行储存或者网络传输,关于字符编码和字符集的扩展知识可见[1]。如Fig 1.1所示,在python3中称bytes -> unicode的过程为解码,而unicode -> bytes的过程为编码,数据类型而言,在python3中的<class 'str'>其实对应python2的<type 'unicode'>,python3的<class 'bytes'>对应python2的<type 'str'>。对于函数而言,python3的bytes()对应python2的str(),python3的str()对应python2的bytes()。相对应的,对于python3而言的解码对于python2而言是编码,对于python3而言的编码则是python2的解码。

总而言之,在python中推荐一切字符处理都转换成unicode后进行处理,需要持久化或者传输时候在编码成字节流进行后续操作。
python3_str_enc_dec

Fig 1.1 python3中字符串的编码与解码。

Reference

[1]. https://zhuanlan.zhihu.com/p/38333902, 字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 15:42:14  更:2022-05-01 15:43:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:52:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码