当前位置: 主页 > Python语言

python 把unicode编码-python用unicode编码

发布时间:2023-02-08 11:28   浏览次数:次   作者:佚名

Python初学者目录:点击打开链接

Python学习推荐网站:点击打开链接

字符编码

String也是一种数据类型,但是string的特别之处在于存在编码问题。

因为计算机只能处理数字,所以如果要处理文本python 把unicode编码,必须先将文本转换为数字,然后才能处理。 最早的计算机在设计时使用8位(bit)作为一个字节(byte),所以一个字节所能表示的最大整数是255(二进制11111111=十进制255),如果要表示更大的整数,就必须使用更多字节。 例如,两个字节可以表示的最大整数是65535,四个字节可以表示的最大整数是4294967295。

由于计算机是美国人发明的,最早只有127个字符被编码进计算机,即大小写的英文字母、数字和一些符号。 这种码表称为 ASCII 码。 例如大写字母A的编码为65.,小写字母z的编码为122。

但是要处理中文,一个字节显然是不够的,至少需要两个字节,而且不能和ASCII码冲突。 为此,我国制定了GB2312编码对中文进行编码。

世界上有数百种语言。 日本将日语编译成Shift_JIS,韩国将韩语编译成Euc-kr。 每个国家都有自己的标准,难免会发生冲突。 因此,在多语言混合文本中,会出现乱码显示。

因此,Unicode应运而生。  Unicode把所有的语言统一成一套编码,这样就不会再出现乱码了。

Unicode标准也在不断发展,但最常见的是用两个字节来表示一个字符(如果要用很远的字符,就需要4个字节)。 现代操作系统和大多数编程语言都直接支持 Unicode。

现在,我们来看看ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节。

字母A的ASCII码十进制为65,二进制为01000001;

字符 0 的 ASCII 码十进制为 48,二进制为 00110000(注意字符“0”与整数 0 不同)

汉字已经超出了ASCII编码的范围。  Unicode编码十进制为20013,二进制为1538729559661101。

可以猜想,如果ASCII编码的A是用Unicode编码的话,只需要在前面加0即可。 因此,A的Unicode编码为1538729559660001。

一个新的问题又出现了:如果统一成Unicode编码,乱码问题就没有了。 但是,如果你写的文字基本都是英文的话,使用Unicode编码需要的存储空间是ASCII编码的两倍,无论从存储还是传输上都是非常不经济的。

因此,本着节约的精神,出现了将Unicode编码转换为“变长编码”的UTF-8编码。  UTF-8编码将一个Unicode字符根据不同的数字大小编码成1-6个字节。 常用的英文字母编码为1个字节,汉字通常为3个字节。 只有非常罕见的字符才会被编码。 编码为 4-6 个字节。 如果要传输的文本包含大量英文字符,UTF-8编码可以节省空间:

特点

ASCII码

统一码

UTF-8编码

A

01000001

1538729559660001

01000001

中间

X

1538729559661101

153872955966153872955966

从上表还可以发现,UTF-8编码还有一个额外的好处,就是ASCII编码其实可以看作是UTF-8编码的一部分,所以大量只支持ASCII编码的遗留软件可以以 UTF-8 代码编码以继续工作。

弄清楚ASCII、Unicode和UTF-8的关系后,我们可以总结出目前计算机系统通用的字符编码工作方式:

在计算机内存中,统一使用Unicode编码,需要保存到硬盘或需要传输时,转换为UTF-8编码。

用记事本编辑时,将从文件中读取的UTF-8字符转换成Unicode字符存入内存。 编辑好后,将Unicode转为UTF-8,保存时保存到文件中:

Python字符编码简介_十进制

浏览网页时,服务器会将动态生成的Unicode内容转换为UTF-8python 把unicode编码,然后传输给浏览器:

Python字符编码简介_大整数_02

所以你在很多网页的源代码上看到类似的信息,说明该网页是用UTF-8编码的。