Python | Python学习之unicode和utf8

简介: Python | Python学习之unicode和utf8

中文乱码、unicode和utf8

http://openskill.cn/article/448

https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386819196283586a37629844456ca7e5a7faa9b94ee8000

开始之前我们先了解下ASCII、GB2312、unicode、UTF-8都是啥?

编码演化史

ASCII编码

在很久很久以前,美国人发明了计算机,计算机只能处理数字也就是把文字转换为8个bit也就是一个字节,8个bit最大能表示的数字为255,而[A-Z]、[a-z]、[0-9]再加上键盘上的一些符号正好255个,所以ASCII编码就成为了美国人的标准编码(用一个字节代表一个字母或者符号),正好也满足了美国人的需求。

GB2312

有了上面的情况,我大中国表示不服,我们中国汉字博大精深,255个明显是满足不了我们的需求的,于是我们就发明了GB2312编码(用两个字节表示汉字),不仅包含了ASCII码还能表示我们的中国的汉字,于是有了我们中国的例子,世界各国纷纷研究出了支持自己语言的编码,在这种情况下多种语言混合显示就出现了乱码的情况了,对于这种情况就出现了unicode编码将所有语言统一到一起。

unicode

unicode编码的出现解决了多国语言展示乱码的问题,但是unicode的解决方案在全英文文档展示的情况下,unicode编码会比ASCII编码多一倍的存储空间(unicode的编码是16bit的,在表示ASCII编码时是直接在前面加上8个0)相应的在传输的时候就多了一倍的传输时间,在这种情况下就出现了UTF8编码。

UTF8

UTF8编码相比于8bit的ASCII编码和16bit的unicode编码来说,UTF8编码是不定长的,它可以使用两个字节代表英文,用三个字节代表中文,UTF8这个时候优势就很大了,在实际运用中,我们可以将文件编码互相转换以获取最大化的利用内存,把文件保存在内存中我们采用内存占用更小的UTF8编码的格式,读写文件时我们采用更大更全的unicode编码,具体实例图如下:

示例图

代码演示

Python2.7

windows

在python2.7中当要将字符串encode为utf8,我们需要确保之前的字符串的编码方式为unicode,所以当字符串编码不为unicode时,我们需要使用decode方法,而在使用decode方法时我们需要指明原有字符串的编码格式(在windows系统中解释器默认编码为GB2312,Linux系统中为UTF-8编码),所以就有了s.decode("gb2312").encode("utf-8")

decode示意图

Linux

按照上面解读,我们在Linux系统下操作如下:

这里就有一个疑问既然原有系统默认的字符串编码为utf-8,为什么不可以直接使用s.decode().encode('utf-8')?原因就是,如若不指定原有的系统编码格式(utf-8),Linux系统下会调用python解释器的默认编码ASCII解析字符串,演示如下:

所以在根据上面的情况,在python2中出现编码互转的情况,可以参考下图:

Python3.6

Python2.7和Python3.6最大的区别就是在执行Python2.7项目时,当项目中包含汉字时,需要在文件头声明编码格式,否则项目中的中文显示就是乱码。

而在Python3中完全没有这样的顾虑,那是因为默认python3中全部的字符串就是unicode可以直接使用encode方法。

综上:为了避免给自己添麻烦,请认准unicode和UTF-8编码。

相关文章
|
3月前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
121 61
|
3月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
158 3
|
4月前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
520 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
2月前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
2月前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
1月前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
2月前
|
存储 索引 Python
Python学习的自我理解和想法(6)
这是我在B站千锋教育学习Python的第6天笔记,主要学习了字典的使用方法,包括字典的基本概念、访问、修改、添加、删除元素,以及获取字典信息、遍历字典和合并字典等内容。开学后时间有限,内容较为简略,敬请谅解。
|
2月前
|
存储 程序员 Python
Python学习的自我理解和想法(2)
今日学习Python第二天,重点掌握字符串操作。内容涵盖字符串介绍、切片、长度统计、子串计数、大小写转换及查找位置等。通过B站黑马程序员课程跟随老师实践,非原创代码,旨在巩固基础知识与技能。
|
2月前
|
程序员 Python
Python学习的自我理解和想法(3)
这是学习Python第三天的内容总结,主要围绕字符串操作展开,包括字符串的提取、分割、合并、替换、判断、编码及格式化输出等,通过B站黑马程序员课程跟随老师实践,非原创代码。
|
2月前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。

热门文章

最新文章