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的文章看。然后刷题不用…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
