Python——ASCII编码与Unicode(UTF-8,UTF-16 和 UTF-32)编码
Python3
Python——ASCII编码与Unicode(UTF-8,UTF-16 和 UTF-32)编码
文章目录
- Python3
- 一、编码与编码格式
- 二、ASCII编码与UTF-8编码(UTF-16 和 UTF-32编码)
- 三、ASCII 字符串和 Unicode 字符串
最近看Python程序的文件头部声明时发现Python2中默认的编码格式为ASCII码格式,Python3中默认的编码格式为UTF-8格式,那么为什么随着Python的迭代,会改变其编码方式呢,两种编码方式的区别又有哪些呢?
一、编码与编码格式
- 编码:编码简单而言就是一种翻译的过程,将机器能够理解的语言转换为我们人类可以理解的语言。
- 编码方式:编码格式就是翻译的方式,根据对存储空间与编码效率的要求来选择不同的编码格式。
- 常见的编码格式:ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16、UTF-32 等。
- 查看当前python环境下的默认编码格式:进入python后,在控制台下输入以下命令。
>>import sys
>>sys.getdefaultencoding()//python2 为>>'ascii',python3 为>>'utf-8'

二、ASCII编码与UTF-8编码(UTF-16 和 UTF-32编码)
- ASCII 编码、UTF-8 编码、UTF-16 编码和 UTF-32 编码都是字符编码方式,用于表示文本字符在计算机中的存储和传输。
-
ASCII 编码(American Standard Code for Information Interchange):
- ASCII 编码最早于 1963 年发布,是一种基于 7 位二进制编码的字符集,用于表示英文字母、数字、标点符号和一些控制字符。
- ASCII 编码仅包含 128 个字符,使用 7 位二进制(0-127)表示。这包括了标准的英语字母、数字和一些常见符号。
- 由于其限制性,ASCII 主要适用于英语和一些西欧语言。
-
UTF-8 编码(Unicode Transformation Format - 8-bit):
- UTF-8 是一种变长字符编码,广泛用于表示 Unicode 字符集中的字符。
- UTF-8 使用 8 位字节(1 到 4 个字节)来表示字符,可以表示几乎所有的 Unicode 字符。
- ASCII 字符在 UTF-8 编码中与原始 ASCII 完全兼容,因此 ASCII 文本在 UTF-8 中也是有效的。
- UTF-8 是最常用的 Unicode 编码方式,因为它在表示英语和拉丁字符时非常高效,同时也可以表示各种语言的字符。
-
UTF-16 编码(Unicode Transformation Format - 16-bit):
- UTF-16 使用 16 位字节(2 个字节或 4 个字节)来表示字符,它是一种定长或变长编码方式,可以表示 Unicode 字符。
- UTF-16 可以有效地表示大多数 Unicode 字符,但对于一些罕见字符,需要使用 4 个字节。
- UTF-16 在处理多语言文本和大型字符集时比 UTF-8 效率更高,但相对于 ASCII 文本来说更占用存储空间。
-
UTF-32 编码(Unicode Transformation Format - 32-bit):
- UTF-32 使用 32 位字节(4 个字节)来表示每个字符,它是一种定长编码方式,能够表示 Unicode 字符。
- UTF-32 对于表示 Unicode 字符非常直观,每个字符都占用相同的存储空间。
- 由于每个字符都占用 4 个字节,UTF-32 编码通常占用更多的存储空间,但在某些特定应用中可能更方便。
- 总结:ASCII 编码适用于英语和一些西欧语言,而 UTF-8、UTF-16 和 UTF-32 是 Unicode 编码,用于支持全球范围内的多语言和字符集。UTF-8 是最常用的 Unicode 编码,因为它具有较高的效率和广泛的支持。UTF-16 和 UTF-32 精确性更高,但对存储空间的需求也更大,这两者在特定应用中也有用途,具体取决于字符需求和存储空间考虑。
- 为了代码更好的泛用性和移植性,所以Python3将编码方式从ASCII升级为UTF-8。
三、ASCII 字符串和 Unicode 字符串
关于ASCII和Unicode,两个版本中,其字符串的类型也有所变化。
- Python 2 中有 ASCII 字符串和 Unicode 字符串,分别用
str和unicode表示。 - Python 3 中默认的字符串类型是 Unicode 字符串,用
str表示,而 ASCII 字符串使用bytes表示。
- 区别
ASCII 字符串和 Unicode 字符串是两种不同的字符编码方式,它们之间有一些重要的区别:
-
字符集和编码方式:
- ASCII 字符串:ASCII(American Standard Code for Information Interchange)是一种最早的字符编码标准,最初设计用于英语和其他西欧语言。ASCII 字符集包含 128 个字符,包括英文字母、数字、标点符号和一些控制字符。ASCII 使用 7 位二进制来表示这些字符。
- Unicode 字符串:Unicode 是一个更广泛的字符编码标准,旨在涵盖世界上几乎所有的字符和符号,包括各种语言、符号、表情符号等。Unicode 字符集包含数千个字符,每个字符都有唯一的 Unicode 编码,可以使用不同的编码方式来表示,如 UTF-8、UTF-16 和 UTF-32。
-
字符表示:
- ASCII 字符串:ASCII 字符串中的字符是单字节的,即每个字符占用 8 位(1 字节)的内存空间。ASCII 字符集中的字符可以使用其对应的 ASCII 值来表示。
- Unicode 字符串:Unicode 字符串中的字符可以是多字节的,取决于所使用的编码方式。不同的编码方式会占用不同数量的字节,例如,UTF-8 使用变长编码,一个字符可以占用 1 到 4 个字节。
-
字符范围:
- ASCII 字符串:ASCII 字符集仅包含基本的英文字母、数字和一些常见符号,局限于英语和西欧语言的字符。
- Unicode 字符串:Unicode 包含了全球各种语言的字符,因此能够表示更多语言和符号,包括亚洲语言、阿拉伯字母、希腊字母、数学符号、表情符号等。
-
应用领域:
- ASCII 字符串:适用于英语和一些西欧语言的应用,通常用于较老的系统和传统的应用程序。
- Unicode 字符串:广泛用于现代应用程序、国际化应用、互联网和多语言环境中,能够处理多语言和多文化的字符需求。
- 总结,ASCII 字符串和 Unicode 字符串之间的主要区别在于字符集的范围和字符的表示方式。Unicode 提供了更广泛、更多样化的字符集,以满足全球化和多语言环境的需求,但可能需要更多的存储空间来表示字符,具体取决于所使用的编码方式。在现代应用程序中,使用 Unicode 编码通常是首选,以支持多语言和国际化需求。
相关文章:
Python——ASCII编码与Unicode(UTF-8,UTF-16 和 UTF-32)编码
Python3 Python——ASCII编码与Unicode(UTF-8,UTF-16 和 UTF-32)编码 文章目录 Python3一、编码与编码格式二、ASCII编码与UTF-8编码(UTF-16 和 UTF-32编码)三、ASCII 字符串和 Unicode 字符串 最近看Python程序的文件…...
【多媒体技术与实践】音频信息获取和处理——编程题汇总
1:音频信息数据量计算 已知采样频率(单位KHz)、量化位数、声道数及持续时间(单位分钟),求未压缩时的数据量(单位MB). 例如: 输入: 22.05 16 2 3 ÿ…...
堆优化迪氏最短单源路径原理及C++实现
时间复杂度 O(ElogE),E是边数。适用与稀疏图。 使用前提 边的权为正。可以非连通,非连通的距离为-1。 原理 优选队列(小根堆)记录两个数据:当前点到源点距离,当前点。先处理距离小的点;如果…...
Leetcode202. 快乐数
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1࿰…...
【MySQL】MySql常见面试题总结
目录 一、什么是sql注入 二、sql语句的执行流程 三、内连接和外连接的区别 四、Union和Union All 有什么区别 五、MySql如何取差集 六、DELETE和TRUNCATE有什么区别 七、count(*)和count(1)的区别 八、MyISAM和InnoDB的区…...
【Java 进阶篇】JDBC PreparedStatement 详解
在Java中,与关系型数据库进行交互是非常常见的任务之一。JDBC(Java Database Connectivity)是Java平台的一个标准API,用于连接和操作各种关系型数据库。其中,PreparedStatement 是 JDBC 中一个重要的接口,用…...
嵌入式Linux应用开发-驱动大全-第一章同步与互斥①
嵌入式Linux应用开发-驱动大全-第一章同步与互斥① 第一章 同步与互斥①1.1 内联汇编1.1.1 C语言实现加法1.1.2 使用汇编函数实现加法1.1.3 内联汇编语法1.1.4 编写内联汇编实现加法1.1.5 earlyclobber的例子 1.2 同步与互斥的失败例子1.2.1 失败例子11.2.2 失败例子21.2.3 失败…...
【计算机网络】 基于UDP的简单通讯(客户端)
文章目录 客户端流程代码实现添加头文件以及库依赖加载库创建套接字发送接收数据关闭套接字、卸载库 测试 客户端 流程 客户端跟服务端差不多,也要先加载库,在加载库之后也要创建套接字,但是客户端一定是没有绑定ip地址的,之后是…...
【云备份项目】:环境搭建(g++、json库、bundle库、httplib库)
文章目录 1. g 升级到 7.3 版本2. 安装 jsoncpp 库3. 下载 bundle 数据压缩库4. 下载 httplib 库从 Win 传输文件到 Linux解压缩 1. g 升级到 7.3 版本 🔗链接跳转 2. 安装 jsoncpp 库 🔗链接跳转 3. 下载 bundle 数据压缩库 安装 git 工具 sudo yum…...
电脑右键新建记事本不见了--设置恢复篇(无需操作注册表)
电脑右键新建记事本不见了–设置恢复篇(无需修改注册表) 电脑不知怎么想右键新建记事本结果竟然不见了,搜寻网上的都是什么修改注册表,粘贴代码修复(感觉太复杂了),这里介绍通过设置内重新对记…...
JavaScript内置对象 - Array数组(四)- 序列生成器
序列生成器是生成一个指定起始值和结束值的序列,并且根据指定间隔长度,生成序列数组。 完成此功能需要使用到Array内置对象的from()对象,以及类数组相关知识,前面几篇有相关案例进行演示。 地址一:JavaScript内置对象…...
GD32F103x IIC通信
1. IIC通信 1.IIC的介绍 IIC总线有两条串行线,其一是时钟线SCK(同步),其二是数据线SDA。只有一条数据线属于半双工。应用中,单片机常常作为主机,外围器件可以挂载多个。(当然主机也可以有多个。…...
什么是FOSS
FOSS 是指 自由和开放源码软件(Free and Open Source Software)。这并不意味着软件是免费的。它意味着软件的源代码是开放的,任何人都可以自由使用、研究和修改代码。这个原则允许人们像一个社区一样为软件的开发和改进做出贡献。...
C++语言GDAL批量裁剪多波段栅格图像:基于像元个数裁剪
本文介绍基于C 语言的GDAL模块,按照给定的像元行数与列数,批量裁剪大量多波段栅格遥感影像文件,并将所得到的裁剪后新的多波段遥感影像文件保存在指定路径中的方法。 在之前的文章中,我们多次介绍了在不同平台,或基于不…...
简单丝的tab切换栏(html/CSS)
#html <!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>CSS实现左右滑动选项卡效果</title><link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/meyer-res…...
LabVIEW开发带式谱感测技术
LabVIEW开发带式谱感测技术 如今,通过无线网络传输的数据量正在迅速增加,并导致频谱稀缺。超过数十亿的无线设备将被连接起来,并需要互联网接入。因此,无线电频谱管理方案的效率不足以授予对所有设备的访问权限。在频谱分配中&am…...
认识柔性数组
在C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员 限制条件是: 结构体中最后一个成员未知大小的数组 1.柔性数组的形式 那么我们怎样写一个柔性数组呢 typedef struct st_type {int i;int a[0];//柔性数组成员 }ty…...
熔断、限流、降级 —— SpringCloud Alibaba Sentinel
Sentinel 简介 Sentinel 是阿里中间件团队开源的,面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性 Sentinel 提供了两个服务组件…...
python经典百题之反向输出数字
题目:输入一个整数,并将其反转后输出。 程序分析 我们需要对输入的整数进行反转,即将整数的数字反向排列。 方法1:使用字符串反转 解题思路 将整数转换为字符串,然后对字符串进行反转。 代码实现 def reverse_integer_usin…...
复习Day08:哈希表part01:242.有效的字母异位词、349. 两个数组的交集、1. 两数之和、160. 相交链表
之前的blog:https://blog.csdn.net/weixin_43303286/article/details/131765317 我用的方法是在leetcode再过一遍例题,明显会的就复制粘贴,之前没写出来就重写,然后从拓展题目中找题目来写。辅以Labuladong的文章看。然后刷题不用…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
