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

[Python学习日记-23] Python v2 和 v3 中的字符编码

简介

        在Python 中的字符编码(上)和Python 中的字符编码(下)中学习了字符编码的理论知识那么就,我们把目光回到 Python 当中,下面我们来讲述一下 Python2 和 Python3 之间的一些关于编码的差别。

Python2 vs Python3 的编码

一、Python2

        Python 出来时还没有 Unicode 和 UTF-8,所以当时龟叔只能选用 ASCII 作为默认编码,一直到 Python2.7 还是用 ASCII,这导致 Python2 默认只支持英文,如果想支持其它语言,则必须单独配置。所以这导致中国的程序员在 Python2 开发应用时,若无意间写下了中文但是却有没有声明,就很容易导致报错等一系列错误

# py2编码_ascii.py 代码如下
# --------------------------------

print("世界那么大我想去看看")

代码报错如下:  

        报错大意为:'\xca' 该十六进制编码并不是 ASCII 码,但未声明编码,让你去查看这个网址(PEP 263 – Defining Python Source Code Encodings | peps.python.org)查看详情

        报错当中提到的声明编码其实就是需要在程序首行顶头位置需要写出需要使用的字符编码,这样 Python2 才会进行调度,而声明编码有两种方式分别是:

# coding:gbk

# -*- encoding:gbk -*-        # 官方推荐使用

        那我们就使用官方推荐使用的进行使用,我们对上面报错的代码进行改进一下,让他正常显示,代码如下

# py2编码.py 代码如下
# --------------------------------

# -*- encoding:gbk -*-

print("世界那么大我想去看看")

代码输出如下 :

        不知道大家有没有发现,前面声明的编码为什么一定是 GBK 编码呢?而不能是 UTF-8 呢?这是因为我们所使用的中文版 Windows 默认的字符编码就是 GBK 而我们如果使用 UTF-8 声明在 cmd(命令行)当中也会显示乱码,修改的代码如下

# -*- encoding:utf-8 -*-

print("世界那么大我想去看看")

代码输出如下 :

        造成这种结果的原因是因为 Windows 默认使用的 GBK 编码并不认识 UTF-8,而它只认识 Unicode。而这种问题不单单只是在执行时出现,而是在编写时也有可能遇到该状况,例如我使用的编辑器使用的是 UTF-8 编码,而 Windows 默认使用的是 GBK 编码,如果在 cmd 当中对代码进行查看也会是乱码,如下图所示,我设定编辑器使用的是 UTF-8 编码进行编程

        下面我们来看看在 cmd 当中使用 type 命令查看代码是什么结果

        所以在 Python2 里编码问题是非常头疼的,若不是彻底理解编码之间的各种关系,会经常容易出现乱码而不知所措。

        在字符串类型方面 Python2 也拥有两种类型,分别为:

  1. str 类型表示字节序列
  2. unicode 类型表示 Unicode 字符串

        到了 Python3 将彻底结束这一乱象。

二、Python3

        在 Python3 推出后,终于把默认编码改成了 Unicode,同时文件存储编码变成了 UTF-8,这意味着,Python3 不再需要像 Python2 那样进行任何声明编码,也意味着可以在代码当中写各种语言文字,下面我们来看看 Python3 的演示代码

print("世界那么大我想去看看")    # 无需进行任何声明编码

代码输出如下 :

        在字符串类型方面 Python3 也只剩下了一种类型,即 str 类型表示 Unicode 字符串。

总结 

        总的来说,Python 3 在字符编码方面进行了改进,使得处理多语言文本更加容易和可靠。在开发新的 Python 项目时,建议使用 Python 3 以避免 Python 2 中可能出现的字符编码问题。


http://www.kler.cn/a/306307.html

相关文章:

  • 【计算机网络】TCP网络程序
  • 机器学习总结
  • 【学习】Fine-tuning知识汇总
  • Bugku CTF_Web——文件上传
  • 探索Pillow库:Python图像处理的瑞士军刀
  • 用vscode编写verilog时,如何有信号定义提示、信号定义跳转(go to definition)、模块跳转这些功能
  • python定时任务,定时爬取水质和天气
  • Navicat On-Prem Server 2.0 | MySQL与MariaDB基础管理功能正式上云
  • Windows电脑A远程连接电脑B
  • Java面试篇基础部分-Java反射机制是什么
  • 镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态
  • Lua闭包
  • 基于yolov5的混凝土缺陷检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • 【Linux C | 终端设备】Linux下 tty、ttyS*、ttyAMA*、console 的区别,以及系统输出重定向(附带代码)
  • NPM私库搭建-verdaccio(Linux)
  • 【Kubernetes】常见面试题汇总(十七)
  • Django+Vue基于OpenCV的人脸识别系统的设计与实现
  • CleanMyMac X 4.15.6正式版 mac直装破解版
  • 小阿轩yx-案例:Zabbix监控kubernetes云原生环境
  • ios 用JXCategoryView 库实现tab滑动切换viewController
  • 破解AI生成检测:如何用ChatGPT降低论文的AIGC率
  • Redis Universe: 探索无边界的数据处理星系
  • 网络安全 day6 --- 抓包技术HTTPS协议小程序PC应用WEB转发联动
  • Spring Boot-分布式系统问题
  • 运算符学习
  • Selenium元素定位:深入探索与实践