返回顶部
首页 > 资讯 > 后端开发 > Python >Python字符集和字符编码详情
  • 633
分享到

Python字符集和字符编码详情

2024-04-02 19:04:59 633人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录前言字符集和字符编码小结前言 这一次我们分析一下python的字符串,首先字符串是一个变长对象,因为不同长度的字符串所占的内存是不一样的;但同时字符串又是一个不可变对象,因为一旦

前言

这一次我们分析一下python字符串,首先字符串是一个变长对象,因为不同长度的字符串所占的内存是不一样的;但同时字符串又是一个不可变对象,因为一旦创建就不可以再修改了。

Python中的字符串是通过unicode来表示的,在底层对应的结构体是PyUnicodeObject。不过话说回来,为什么需要unicode呢?

首先计算机存储的基本单位是字节,由8个比特位组成,由于英文字母算上大小写只有52个,再加上若干字符,数量不会超过256个,因此一个字节完全可以表示。但是随着计算机的普及,越来越多的非英文字符出现,导致一个字节已经无法表示了。所以只能曲线救国,对于一个字节无法表示的字符,使用多个字节表示

但是这样会出现两个问题:

  • 因为每个国家都有自己的字符编码,所以不支持多国语言,例如中文的编码不可以包含日文,否则就会造成乱码;
  • 没有统一标准,例如中文有GB2312、GBK、GB18030等多个标准;

到这里我们先不继续往下深入,我们先来理清楚一些概念。

字符集和字符编码

估计有很多小伙伴搞不清这两者的区别,我们先来解释一下所谓的字符集和字符编码是怎么一回事?

字符集:系统支持的所有字符组成的集合,像ASCII、GB2312、Big5、unicode都属于字符集。只不过不同的字符集所能容纳的字符个数不同,比如ASCII字符集中不包含中文,unicode则可以容纳世界上的所有字符;

字符编码:负责将每个字符转换成一个或多个计算机可以接受的具体数字,该数字可以理解为编号,因此字符编码维护了字符和编号之间的对应关系。而编码也分为多种,比如ascii、gbk、utf-8等等,字符编码不同,那么字符转换之后的编号也不同,当然能转化的字符种类也不同。比如ASCII这种字符编码,它就只能转换ASCII字符。

当然,ASCII比较特殊,它既是字符集、也是字符编码。并且不管采用什么编码,ASCII字符对应的编号永远是相同的。

将字符串中的每一个字符转成对应的编号,那么得到的就是字节序列(bytes对象),因为计算机存储和网络通讯的基本单位都是字节,所以字符串必须以字节序列的形式进行存储或传输。

因此字符串和字节序列在某种程度上是很相似的,字符串按照指定的编码进行encode即可得到字节序列,也就是将每个字符都转成对应的编号;字节序列按照相同的编码decode即可得到字符串,也就是根据编号找到对应的字符。

比如我们写了一段文本,然后在存储的时候必须先进行编码,也就是将每一个字符都转成一个或多个系统可以接受的数字、即对应的编号之后,才可以进行存储。

s = "你好"
# 编码之后就是一串数字
print(s.encode("gbk"))  # b'\xc4\xe3\xba\xc3'

假设文本中只有你好二字,在存储的时候采用gbk进行编码,那么在读取的时候也必须使用gbk进行解码,否则的话就会无法解析而报错。因为字符编码不同,字符对应的编号也不同。

再比如每个国家都有自己的字符编码,你在日本的一台计算机上写好的文件拿到中国的计算机上打开,很有可能出现乱码。因为字符编码不同,字符和编号之间的对应关系也不同,采用不同的字符编码进行解析肯定会出问题。

但我们说,对于ASCII字符来说,由于不管采用哪一种编码,它们得到的编号都是固定的。所以编码对于ASCII字符来说,没有任何影响。

s = "abc"
print(s.encode("gbk"))  # b'abc'
print(s.encode("gbk").decode("utf-8"))  # abc

# 但如果是非ASCII字符,就不行了
try:
    s = "你好"
    s.encode("gbk").decode("utf-8")
except UnicodeError as e:
    # 报错了,无法解析
    print(e)  
    # 'utf-8' codec can't decode byte 0xc4 in position 0: invalid continuation byte

这里我们再回忆一下bytes对象,我们创建的时候可以采用字面量的方式,比如 b"abc",但是 b"憨"却不可以。原因就是憨这个字符不是ASCII字符,那么采用不同的字符编码,其对应的编号是不同的,而这种方式Python又不知道我们使用哪一种编码,所以不允许这么做,而是需要通过"憨".encode的方式手动指定字符编码。

但是对于 ASCII 字符而言,不管采用哪一种字符编码,得到的编号都是一样的, 所以Python针对ASCII字符则允许这种做法,比如b"abc"。并且我们看到,对于汉字来说,在编码之后会对应多个编号,而每个编号占1字节,因此不同的字符所占的大小可能不同。

小结

以上就是字符集和字符编码,字符集就是字符组成的集合,不同字符集所能容纳的字符数量是有限的。字符编码是将字符转成对应的编号,比如将一个字符串中的所有字符都转成对应的编号之后,就得到了字节序列。

当然和字符集一样,字符编码能转换的字符种类也是有限的,像汉字我们可以使用 gbk 编码、utf-8 编码,但是不能使用 ascii 编码。

到此这篇关于Python字符集和字符编码详情的文章就介绍到这了,更多相关Python字符编码内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python字符集和字符编码详情

本文链接: https://www.lsjlt.com/news/117914.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python字符集和字符编码详情
    目录前言字符集和字符编码小结前言 这一次我们分析一下Python的字符串,首先字符串是一个变长对象,因为不同长度的字符串所占的内存是不一样的;但同时字符串又是一个不可变对象,因为一旦...
    99+
    2024-04-02
  • MySQL--字符编码和字符集
    前言: 一般来说,出现中文乱码,都是客户端和服务端字符集不匹配导致的原因。(默认未指定字符集创建的数据库表,都是latinl字符集, 强烈建议使用utf8字符集)  保证不出现乱码的思想:保证客户端、服务端...
    99+
    2024-04-02
  • Python字符集和字符编码是什么
    这篇文章主要介绍“Python字符集和字符编码是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python字符集和字符编码是什么”文章能帮助大家解决问题。首先计算机存储的基本单位是字节,由8个比...
    99+
    2023-06-30
  • 深入解析字符集和字符编码
    ...
    99+
    2024-04-02
  • python字符串运算符详情
    知识点:字符串 在编程里,用的最多的就是字符串,字符串同时也是各类数据的中转站 ​字符串运算符:​ 编号运算符类型说明1+字符串拼接2*同一字符串多次输出3[]通过下标获取字符串其中...
    99+
    2024-04-02
  • python字符编码
    近期接触到python的编码相关的东西,发现自己了解的不是太系统,故通过搜索资料做了一些总结。 字符编码 字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。 我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位...
    99+
    2023-01-31
    字符 python
  • Python生成随机数字和字符详情
    目录random库生成一个指定长度的随机字符串Faker库random库 random是python自带库,使用前导入 import random 即可,无需安装。 举例: imp...
    99+
    2024-04-02
  • Python中的字符串与字符编码
    Hello,这里是Token_w的博客,欢迎您的到来 今天文章讲解的是Python中的字符串与字符编码,其中有基础的理论知识讲解,也有实战中的应用讲解,希望对你有所帮助 整理不易,如对你有所帮助,希望能得到你的点赞、收藏支持。感谢 ...
    99+
    2023-08-30
    python android 开发语言
  • MySQL中GBK字符集和UTF8字符编码的相关操作
    下面讲讲关于MySQL中GBK字符集和UTF8字符编码的相关操作,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完MySQL中GBK字符集和UTF8字符编码的相关操作这篇文章你一定...
    99+
    2024-04-02
  • Python 字符串操作详情
    目录1、字符串的定义2、转义字符串和原始字符串3、字符串的运算3.1 拼接运算符3.2 成员运算4、获取字符串长度5、索引和切片6、字符串的方法6.1 转换大小写6.2 查找操作6....
    99+
    2024-04-02
  • MySQL默认字符集设置详情
    目录查看各版本默认字符集修改mysql5中的默认字符集已有库&表字符集的变更各级别的字符集字符集与比较规则utf8 与 utf8mb4比较规则请求到响应过程中字符集的变化SQL大小写规范Windows和linux...
    99+
    2024-04-02
  • python字符串编码
    python默认编码   python 2.x默认的字符编码是ASCII,默认的文件编码也是ASCII。   python 3.x默认的字符编码是unicode,默认的文件编码是utf-8。   中文乱码问题   无论以什么编码在内存里显...
    99+
    2023-01-30
    字符串 python
  • Linux的字符集及编码
    Linux 字符集设置 查询 (1) 查看当前服务器字符集:  # locale  (2) 查看服务器支持的字符集:  # locale -a 修改linux系统字符集的方式有如下两种: (1) 直接设置变量的方式修改,命令如下两条命令: ...
    99+
    2023-09-02
    linux 服务器 运维
  • MySQL修改默认引擎和字符集详情
    目录一、数据库引擎1.1 查看数据库引擎1.2 修改默认数据库引擎二、数据库字符集2.1 查看字符集 2.2 修改字符集一、数据库引擎 1.1 查看数据库引擎 mysql>...
    99+
    2024-04-02
  • python数字类型和占位符详情
    目录一、数据类型1.数据类型的判断2.float 浮点型3.bool 布尔型4.complex 复数类型5.转义字符6.格式化字符串一、数据类型 1.数据类型的判断 Number =...
    99+
    2024-04-02
  • 字符编码
    计算机基础 文本编辑器存取文件的原理 1.打开编辑器就打开启动了一个进程,是在内存中,所以,用编码器编写的内容也都存放在内存中的,断电后数据丢失。 2.要想永久保存,需要点击保存按钮:编辑器把内存的数据拴到硬盘上。 3.早我们编写一个...
    99+
    2023-01-31
    字符
  • Python chardet 字符编码判
    使 用 chardet 可以很方便的实现字符串/文件的编码检测。尤其是中文网页,有的页面使用GBK/GB2312,有的使用UTF8,如果你需要去爬一些页面,知道网页编码 很重要的,虽然HTML页面有charset标签,但是有些时候是不对的...
    99+
    2023-01-31
    字符 Python chardet
  • python字符编码与转码
    python 2.x 字符编码与转码打印系统默认编码格式import sys print(sys.getdefaultencoding())UTF-8 转 gbk方式:utf-8--转成--unicode--转成--gbka = "你好" ...
    99+
    2023-01-31
    字符 python
  • Python3 字符编码
    原文出处:http://www.cnblogs.com/284628487a/p/5584714.html编码字符串是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才...
    99+
    2023-01-31
    字符
  • Python中的字符串操作和编码Unicode详解
    本文主要给大家介绍了关于 Python中的字符串操作和编码Unicode的一些知识,下面话不多说,需要的朋友们下面来一起学习吧。 字符串类型 str:Unicode字符串。采用''或者r''构造的字符串均...
    99+
    2022-06-04
    字符串 详解 操作
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作