当前位置: 首页 > news >正文

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 编码都是字符编码方式,用于表示文本字符在计算机中的存储和传输。
  1. ASCII 编码(American Standard Code for Information Interchange)

    • ASCII 编码最早于 1963 年发布,是一种基于 7 位二进制编码的字符集,用于表示英文字母、数字、标点符号和一些控制字符。
    • ASCII 编码仅包含 128 个字符,使用 7 位二进制(0-127)表示。这包括了标准的英语字母、数字和一些常见符号。
    • 由于其限制性,ASCII 主要适用于英语和一些西欧语言。
  2. 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 编码方式,因为它在表示英语和拉丁字符时非常高效,同时也可以表示各种语言的字符。
  3. UTF-16 编码(Unicode Transformation Format - 16-bit)

    • UTF-16 使用 16 位字节(2 个字节或 4 个字节)来表示字符,它是一种定长或变长编码方式,可以表示 Unicode 字符。
    • UTF-16 可以有效地表示大多数 Unicode 字符,但对于一些罕见字符,需要使用 4 个字节。
    • UTF-16 在处理多语言文本和大型字符集时比 UTF-8 效率更高,但相对于 ASCII 文本来说更占用存储空间。
  4. 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 字符串,分别用 strunicode 表示。
  • Python 3 中默认的字符串类型是 Unicode 字符串,用 str 表示,而 ASCII 字符串使用 bytes 表示。
  • 区别
    ASCII 字符串和 Unicode 字符串是两种不同的字符编码方式,它们之间有一些重要的区别:
  1. 字符集和编码方式

    • ASCII 字符串:ASCII(American Standard Code for Information Interchange)是一种最早的字符编码标准,最初设计用于英语和其他西欧语言。ASCII 字符集包含 128 个字符,包括英文字母、数字、标点符号和一些控制字符。ASCII 使用 7 位二进制来表示这些字符。
    • Unicode 字符串:Unicode 是一个更广泛的字符编码标准,旨在涵盖世界上几乎所有的字符和符号,包括各种语言、符号、表情符号等。Unicode 字符集包含数千个字符,每个字符都有唯一的 Unicode 编码,可以使用不同的编码方式来表示,如 UTF-8、UTF-16 和 UTF-32。
  2. 字符表示

    • ASCII 字符串:ASCII 字符串中的字符是单字节的,即每个字符占用 8 位(1 字节)的内存空间。ASCII 字符集中的字符可以使用其对应的 ASCII 值来表示。
    • Unicode 字符串:Unicode 字符串中的字符可以是多字节的,取决于所使用的编码方式。不同的编码方式会占用不同数量的字节,例如,UTF-8 使用变长编码,一个字符可以占用 1 到 4 个字节。
  3. 字符范围

    • ASCII 字符串:ASCII 字符集仅包含基本的英文字母、数字和一些常见符号,局限于英语和西欧语言的字符。
    • Unicode 字符串:Unicode 包含了全球各种语言的字符,因此能够表示更多语言和符号,包括亚洲语言、阿拉伯字母、希腊字母、数学符号、表情符号等。
  4. 应用领域

    • 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 &#xff…...

堆优化迪氏最短单源路径原理及C++实现

时间复杂度 O(ElogE),E是边数。适用与稀疏图。 使用前提 边的权为正。可以非连通,非连通的距离为-1。 原理 优选队列(小根堆)记录两个数据:当前点到源点距离,当前点。先处理距离小的点;如果…...

Leetcode202. 快乐数

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0…...

【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开发带式谱感测技术 如今&#xff0c;通过无线网络传输的数据量正在迅速增加&#xff0c;并导致频谱稀缺。超过数十亿的无线设备将被连接起来&#xff0c;并需要互联网接入。因此&#xff0c;无线电频谱管理方案的效率不足以授予对所有设备的访问权限。在频谱分配中&am…...

认识柔性数组

在C99中&#xff0c;结构中的最后一个元素允许是未知大小的数组&#xff0c;这就叫做柔性数组成员 限制条件是&#xff1a; 结构体中最后一个成员未知大小的数组 1.柔性数组的形式 那么我们怎样写一个柔性数组呢 typedef struct st_type {int i;int a[0];//柔性数组成员 }ty…...

熔断、限流、降级 —— SpringCloud Alibaba Sentinel

Sentinel 简介 Sentinel 是阿里中间件团队开源的&#xff0c;面向分布式服务架构的高可用流量防护组件&#xff0c;主要以流量为切入点&#xff0c;从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性 Sentinel 提供了两个服务组件…...

python经典百题之反向输出数字

题目:输入一个整数&#xff0c;并将其反转后输出。 程序分析 我们需要对输入的整数进行反转&#xff0c;即将整数的数字反向排列。 方法1&#xff1a;使用字符串反转 解题思路 将整数转换为字符串&#xff0c;然后对字符串进行反转。 代码实现 def reverse_integer_usin…...

复习Day08:哈希表part01:242.有效的字母异位词、349. 两个数组的交集、1. 两数之和、160. 相交链表

之前的blog&#xff1a;https://blog.csdn.net/weixin_43303286/article/details/131765317 我用的方法是在leetcode再过一遍例题&#xff0c;明显会的就复制粘贴&#xff0c;之前没写出来就重写&#xff0c;然后从拓展题目中找题目来写。辅以Labuladong的文章看。然后刷题不用…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...