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

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编写包含字符编码的代码并尝试不同的编码方式来加深对字符编码的理解。

相关文章:

  • 独乐乐不如众乐乐(二)-某汽车零部件厂商IC EMC企业规范
  • 【leetcode】62. 不同路径
  • Flask Session 登录认证模块
  • 打印菱形-第11届蓝桥杯选拔赛Python真题精选
  • 图片转换成pdf格式的软件ABBYY16
  • elasticsearch Connection reset by peer如何处理
  • python爬虫中 HTTP 到 HTTPS 的自动转换
  • colab notebook导出为PDF
  • 利用企业被执行人信息查询API保障商业交易安全
  • 5、Qt:项目中包含多个子项目(.pro)/子模块(.pri)
  • Linux:docker容器操作(4)
  • [网络] 5. TCP 链接的建立与释放~汇总
  • 怎样解决微信上传头像失败的问题?照片尺寸修改方法分享
  • 王者荣耀小游戏
  • 4:kotlin 方法(Functions)
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 3.7、@ResponseBody 和 @RestController
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • C++类中的特殊成员函数
  • create-react-app做的留言板
  • Git 使用集
  • Github访问慢解决办法
  • happypack两次报错的问题
  • Java多线程(4):使用线程池执行定时任务
  • 初探 Vue 生命周期和钩子函数
  • 关于Flux,Vuex,Redux的思考
  • 好的网址,关于.net 4.0 ,vs 2010
  • 后端_ThinkPHP5
  • 记一次和乔布斯合作最难忘的经历
  • 理解在java “”i=i++;”所发生的事情
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 前端工程化(Gulp、Webpack)-webpack
  • 数组大概知多少
  • 探索 JS 中的模块化
  • 在weex里面使用chart图表
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 树莓派用上kodexplorer也能玩成私有网盘
  • 昨天1024程序员节,我故意写了个死循环~
  • !$boo在php中什么意思,php前戏
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #{} 和 ${}区别
  • $.ajax()
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (ibm)Java 语言的 XPath API
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (附源码)springboot教学评价 毕业设计 641310
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (循环依赖问题)学习spring的第九天
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)EOS中账户、钱包和密钥的关系
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转)详解PHP处理密码的几种方式