python字符串使用哪种编码格式?

首先先了解 

什么是字符编码?

我们知道,计算机是以二进制的形式来存储数据的,即它只认识 0 和 1 两个数字。 20 世纪 60 年代,是计算机发展的早期,这时美国是计算机领域的老大,它制定了一套编码标准,解决了 128 个英文字符与二进制之间的对应关系,被称为 ASCII 字符编码(简称 ASCII 码)。

ASCII 码,全称为美国信息交换标准代码,是基于拉丁字母的一套字符编码,主要用于显示现代英语,因为万维网的出现,使得 ASCII 码广为使用,其直到 2007 年 12 月才逐渐被 Unicode 取代。

虽然英语用 128 个字符编码已经够用,但计算机不仅仅用于英语,如果想表示其他语言,128 个符号显然不够用,所以很多其他国家都在 ASCII 的基础上发明了很多别的编码,例如包含了汉语简体中文格式的 GB2312 编码格式(使用 2 个字节表示一个汉字)。

也正是由于出现了很多种编码格式,导致了“文件显示乱码”的情况。比如说,发送邮件时,如果发信人和收信人使用的编码格式不一样,则收信人很可能看到乱码的邮件。基于这个原因,Unicode 字符集应运而生。

Unicode 字符集又称万国码、国际码、统一码等。从名字就可以看出来,它是以统一符号为目标的字符集。Unicode 对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更简单的方式来呈现和处理文字。

注意,在实际使用时,人们常常混淆字符集和字符编码这两个概念,我认为它们是不同的:

  • 字符集定义了字符和二进制的对应关系,为每个字符分配了唯一的编号。可以将字符集理解成一个很大的表格,它列出了所有字符和二进制的对应关系,计算机显示文字或者存储文字,就是一个查表的过程;
  • 而字符编码规定了如何将字符的编号存储到计算机中,要知道,有些字符编码(如 GB2312 和 GBK)规定,不同字符在存储时所占用的字节数是不一样的,因此为了区分一个字符到底使用了几个字节,就不能将字符的编号直接存储到计算机中,字符编号在存储之前必须要经过转换,在读取时还要再逆向转换一次,这套转换方案就叫做字符编码。


Unicode 字符集可以使用的编码方案有三种,分别是:

  1. UTF-8:一种变长的编码方案,使用 1~6 个字节来存储;
  2. UTF-32:一种固定长度的编码方案,不管字符编号大小,始终使用 4 个字节来存储;
  3. UTF-16:介于 UTF-8 和 UTF-32 之间,使用 2 个或者 4 个字节来存储,长度既固定又可变。


其中,UTF-8 是目前使用最广的一种 Unicode字符集的实现方式,可以说它几乎已经一统江湖了。

 

那python中使用的那种字符编码?

python3中使用的Unicode编码,可以查看当前环境使用的编码格式

>>> import sys
>>> sys.getdefaultencoding()
'utf-8'

 

python3 中提供了 ord,chr函数,实现字符和编码数字之间的转换

>>> ord('往')
24448

>>> chr(35695)
'譯'

posted @ 2020-11-12 11:09  delinem  阅读(1084)  评论(0编辑  收藏  举报