Python语言学习笔记之三(字符编码)

本课程对于有其它语言基础的开发人员可以参考和学习,同时也是记录下来,为个人学习使用,文档中有此不当之处,请谅解。

  1. 什么是字符编码

计算机从本质上来说只认识二进制中的0和1,字符编码(Character Encoding) 是一种将字符映射为特定二进制模式的系统,它允许计算机以统一的方式存储和处理字符,无论是字母、数字、符号还是特殊字符。可以说任何数据在计算机中实际的物理表现形式也就是0和1,字符编码的目的是为了方便计算机处理和存储文本。常见的字符编码包括ASCII、UTF-8、GBK等。字符编码通常将字符集中的每个字符映射为一个或多个字节(binary digits),这些字节可以被计算机理解和操作,以实现文本的存储、传输和处理。

  • ASCII

ASCII (American Standard Code for nformation lnterchange美国信息交换标准代码)是最常用的字编码标准之一它为每个字符定义了一个对应的唯一的二进制编码,使得计算机可以方便地存储、传输和处理文本数据。

ASCII编码是最早的字符编码标准,它只包含128个字符,包括大小写英文字母、数字、标点符号和控制字符。它的每个字符都对应一个唯一的7位二进制数。

ASCI编码的用途非常广泛,它是计算机内部处理文本数据的基础。例如,在计算机之间传输文本数据时发送方和接收方需要使用相同的字符编码标准才能正确地解析和处理数据。ASC1编码也是很多其他字符编码标准的基础,例如:UTF-8编码就是基于ASCII编码扩展而来的。

  • ​​​​​​​Unicode

Unicode字符编码标准,它旨在为全球范围内的所有字符提供一个统一的编码系统Unicode使用一个二进制数值来表示每个字符,这样就可以确保每个字符在全球范围内具有唯一的表示这种统一的编码方式使得在不同平台、不同语言之间交换和处理文本数据成为可能。

Unicode编码通常使用一个特定的编码方案来实现,最常见的Unicode编码方案是UTF-8.它是一种可变长度的编码方式。UTF-8使用1到4个字节来表示一个字符,其中一些字节组合用来表示一些常用的字符这样可以提高编码效率,应用过程使用了\u来指示这是一个Unicode转义序列。

  • ​​​​​​​UTF-8

UTF-8 (Unicode Transformation Format-8 bits)是一种可变长度的Unicode编码方案它用于将字符映射为字节序列.

UTF-8编码具有以下特点:

  1. 兼容性: UTF-8完全兼容ASCII编码、即ASCI字符在UTF-8中的编码和ASCII相同变长编码:
  2. UTF-8使用1到4个字节来表示一个字符,这使得它可以表示广泛的字符集,包括世界上几乎所有的语言字符向前兼容:
  3. UTF-8的设计使得旧的UTF-8编码在新的版本中保持不变,这使得UTF-8在不断进的过程中然保持兼容性

  • ​​​​​​​GB2312

GB2312字符编码标准,主要是为了解决汉字在计算机中使用的问题。这是中国国家标准化管理局(GB)制定的一种简体中文字符集编码标准,用于将汉字和其他字符编码为二进制格式以便在计算机系统中使用。

  • ​​​​​​​ISO-8859

ISO-8859字符编码标准,定义了不同标准字符集的编码规则,用于将字符编码为二进制格式,以便在计算机系统中使用,ISO-8859是为了解决ASCII编码无法表示多种语言和特殊字符的问题而设计的,ISO-8859编码在文本传输和网页设计中得到了广泛应用,在邮件传输中,它通常用于SMTP协议和POP3协议以支持多种语言和特殊字符的传输。

2.​​​​​​​如何处理字符编码

在使用Python处理字符编码问题时,以下是一些常见的方法:

  1. 字符串编码与解码:可以使用字符串的encode()方法将字符串编码为指定的编码格式使用decode()方法将已编码的字符串解码为指定的编码格式
  2. 处理转码错误: 在进行编码转换时,如果遇到无法解码或编码的字符.可能会引发UnicodeDecodeError 或UnicodeEncodeError可以使用errors 参数来处理这些错误,常见的处理方式包括 ignore(忽略错误)、 replace(用占位符代替错误字符)等.

将汉字通过ASCii转码,由于ASCii不能转汉字,肯定会报错,可以选择Errors来操作,如下代码:

结果:

  1. 当文本文件包含中文字符时,可能会出现乱码或其他显示问题。这通常是因为中文字符编码使用了与Python解释器不兼容的字符编码,要解决这个问题,可以指定文件的编码方式为UTF-8,并使用codecs.open()函数打开文件.

使用CodeCs库,将一个文件按照UTF-8的格式打开,并打印出来,代码如下:

结果:

  1. 无法正确读取二进制数据: 当尝试使用codecs.open()函数读取二进制数据时,可能会出现错误,这是因为codecs.open()函数默认将文件视为文本文件,要解决这个问题,可以使用二进制模式打开文件,例如使用codecs.open()函数的encoding=None参数并使用二进制模式打开文件。

​​​​​​​​​​​​​​3、总结

  1. 了解字符编码的基本概念:学习Python应用字符编码之前,你需要了解字符编码的基本概念这包括ASCII码、Unicode、UTF-8等
  2. 学习Python内置的编码支持: Python内置了对多种字符编码的支持,包括UTF-8了解Python如何处理字符编码可以帮助你更好地理解如何应用字符编码
  3. 使用Python内置的字符编码函数: Python提供了许多内置的函数来处理字符编码,例如encode()和decode()了解这些函数以及如何使用它们可以帮助更好地应字符编码。
  4. 阅读官方文档和教程: Python官方文档提供了详细的关于字符编码的说明和教程阅读这些文档可以帮助你更好地理解Python应用字符编码的方式
  5. 多多实践: 最好的学习方式是实践,尝试使用Python编写包含字符编码的代码并尝试不同的编码方式来加深对字符编码的理解。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第35天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

JAVA代码编写 860.柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。 每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须…

面向对象基础小结

面向对象基础小结 面向对象和面向过程的区别 两者的主要区别在于解决问题的方式不同: 面向过程:是把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。面向对象:会先抽象出对象,然后用对象执行方法的方…

Deepin使用记录-deepin系统开启SSH服务

1、检查安装的deepin系统是否已经开启SSH功能。 $ ps -e | grep ssh $ ps -e | grep ssh 查看是否启动ssh 2、安装openssh-server服务 sudo apt-get install openssh-server 如果出现以上提示,就表示你已经安装了ssh服务,只是还没有启动。 3、安装完…

大模型fine-tune 微调

大模型的 Fine-tune 我们对技术的理解,要比技术本身更加重要。 正如我在《大模型时代的应用创新范式》一文中所说,大模型会成为AI时代的一项基础设施。 作为像水、电一样的基础设施,预训练大模型这样的艰巨任务,只会有少数技术…

关于Linux服务器高并发场景下系统参数优化的诸多奇技淫巧

文章目录 🔊博主介绍🥤本文内容开篇内存优化——马达与燃油磁盘优化——加油与换胎网络参数优化——挂挡与提速进程优化——适度开疆拓土 📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟,一名Ja…

设二维数组a[1...m,1...n]()含有m*n个整数。写一个算法判断a中所有元素是否互不相同,并输出相关信息(yes/no)

设二维数组a[1…m,1…n]()含有m*n个整数。 写一个算法判断a中所有元素是否互不相同,并输出相关信息(yes/no) 分析其时间复杂度 代码思路: 这种如果纯暴力做的话时间复杂度非常高。 我这里考虑把题目中的二…

「Linux」git的安装与使用

💻文章目录 📄前言安装git的使用配置git初始化 git 仓库提交文件推送到远端使用HTPPS方式:SSH方式 📓总结 📄前言 git是一款多平台的版本管理器,用于对代码进行版本控制,如果你还不知如何安装gi…

虚幻学习笔记6—摄像机控制

一、前言 摄像机在虚幻中的应用是最常见的。如通常在游戏或应用中会常常出现需要切换不同视角的情况、摄像机拉近缩小等,这个在虚幻中是怎么实现的呢。 二、实现视点切换 2.1、提前设置场景的视点:如图2.1.1所示添加一个摄像机视点到关卡场景中&#x…

Java数据结构之优先级队列(PriorityQueue)

1、概念 队列:是一种FIFO(First-In-First-Out)先进先出的数据结构,对应于生活中的排队的场景, 排在前面的人总是先通过,依次进行。 优先队列:是特殊的队列,从“优先”一词&#xff…

计算机网络(超详解!) 第一节计算机网络的性能指标

1.速率 比特(bit)是计算机中数据量的单位,也是信息论中使用的信息量的单位。 比特(bit)来源于 binary digit,意思是一个“二进制数字”,因此一个比特就是二进制数字中的一个 1 或 0。 速率是…

游戏软件的设计方法

游戏软件的设计是一个综合性的过程,涉及到多个方面,包括游戏概念、用户体验、技术实现等。以下是一般的游戏软件设计方法,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 明确游…

第二十章(多线程)

一.线程的简介 Windows操作系统是多任务操作系统,它以进程为单位。一个进程是一个包含有自身地址的程序,每个独立执行的程序都称为进程。也就是说每个正在执行的程序都是一个进程。系统可以分配给每一个进程有一段有限的使用CPU的时间(也可以…

解释LED显示屏的裸眼3D特效原理

LED电子大屏幕的3D特效技术正在不断发展,而实现这一技术的原理主要包括分光、分色、分时和光栅等四种方法。这些原理都有各自的特点和应用场景,下面将对它们进行详细介绍。 1. 分光方法 分光方法是一种基于偏振光的3D显示技术。通过使用偏振滤镜或偏振片…

RISC-V_WCH系列微控器软件体系云端快速架构

1 概述 RISC-V内核的微控器MCU,正在以更高的性价比,快速取代传统的各类ARM系列微控制处理器。 针对常用的芯成RISC-V内核的泌恒WCH系列微控器MCU,推出了:RISC-V_WCH系列微控器软件体系快速架构云平台。只要以身份证号码做用户名…

好看的css样式案例网站

uiverse 网站地址:https://uiverse.io/all 比如说我们要这个案例的代码 点击get code就可以了 右侧有完整的示例代码。 svg波浪生成器 网站:https://getwaves.io/ 根据自己需求调节好之后点击这个下载按钮就可以了

如何把视频中不需要的人物去掉?

从视频中移除不想要的对象或区域,这项工作以前既繁琐复杂又很消耗时间。但使用“AI智能抠像”工具,只需几个简单的步骤,即可轻松移除视频中任何不想要的人物。 在制作视频的过程中,我们常常会遇到需要将视频中多余的人物去掉的情…

Python基础语法之学习type()函数

Python基础语法之学习type函数 一、代码二、效果 查看数据类型或者说查看变量存储的数据类型 一、代码 print(type("文本")) print(type(666)) print(type(3.14))二、效果 梦想是生活的指南针,坚持追逐梦想,终将抵达成功的彼岸。不要害怕失败…

递归实现全排列

思路: 对于给定的集合,选择一个元素作为当前位置的元素。将当前位置的元素与集合中其他位置的元素交换,依次产生新的排列。通过递归调用,将当前位置向后移动,继续生成新的排列。当当前位置达到集合的末尾时,表示生成了…

万字解析设计模式之观察者模式、中介者模式、访问者模式

一、观察者模式 1.1概述 观察者模式是一种行为型设计模式,它允许一个对象(称为主题或可观察者)在其状态发生改变时,通知它的所有依赖对象(称为观察者)并自动更新它们。这种模式提供了一种松耦合的方式&…

国产操作系统-银河麒麟V10

一、介绍 银河麒麟操作系统隶属于麒麟软件,麒麟软件是专业从事国产操作系统研发和产业化的企业,面向通用和专用领域打造安全创新的国产操作系统产品和相应解决方案,旗下拥有银河麒麟、中标麒麟、星光麒麟三大产品品牌。 麒麟软件官方网站地…