栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python字符编码

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python字符编码

编码,就是文字和二进制之间的一个对照表。

ascii编码

最早计算机诞生之初,就产生的编码,ascii规定使用1个字节来表示字母与二进制的对应关系。
例如:

A   01000001
B   01000010

总共有 2 8 = 256 2^8=256 28=256 个编码。对于一些语言是不够的。

gb-2312编码

gb-2312编码,由国家信息标准委员会制作(1980年)。
gbk编码,对gb2312进行扩展,包含了中日韩等文字(1995年)。

在与二进制做对应关系时,由如下逻辑:

  • 单字节表示,用一个字节表示对应关系。2**8 = 256
  • 双字节表示,用两个字节表示对应关系。2**16 = 65536中可能性。
unicode

unicode也被称为万国码,为全球的每个文字都分配了一个码位(二进制表示)。

有两种表示方式:

  • ucs2
用固定的2个字节去表示一个文字。

00000000 00000000     悟
...

2**16 = 65535
  • ucs4
用固定的4个字节去表示一个文字。
00000000 00000000 00000000 00000000  无
...
2**32 = 4294967296
文字     十六进制            二进制 
 ȧ        0227           1000100111
 ȧ        0227         00000010 00100111                       ucs2
 ȧ        0227         00000000 00000000 00000010 00100111     ucs4
 
 乔       4E54           100111001010100
 乔       4E54         01001110 01010100                       ucs2
 乔       4E54         00000000 00000000 01001110 01010100     ucs4
 
       1F606        11111011000000110                                    
       1F606                 无                                                无法用ucs2 进行表示
       1F606        00000000 00000001 11110110 00000110      ucs4

无论是ucs2和ucs4都有缺点:浪费空间。

例如:

文字     十六进制     二进制
A        0041      01000001
A        0041      00000000 01000001
A        0041      00000000 00000000 00000000 01000001
utf-8

包含所有文字和二进制的对应关系,全球应用最为广泛的一种编码(站在巨人的肩膀上功成名就)。

本质上:utf-8是对unicode的压缩,用尽量少的二进制去与文字进行对应。

  unicode码位范围            utf-8      
   0000 ~ 007F              用1个字节表示
   0080 ~ 07FF              用2个字节表示
   0800 ~ FFFF              用3个字节表示
  10000 ~ 10FFFF            用4个字节表示
python相关编码
v = 'abc' # Python内部会使用unicode对abc进行处理,在进行网络传输或者内存处理的时候,需要转成字节(byte)进行处理,这时就需要使用utf-8进行编码

v1 = 'test' # python 内部使用unicode ucs4进行编码,存储在硬盘时,需要将字符串转换为字节,就需要将unicode转成utf-8
v2 = v1.encode('utf-8')

例如将字符串写入到一个文件中:

name = "hello world"  # 默认是字符串unicode编码,写入文件需要转为字节utf-8
data = name.encode('utf-8')
file_obj = open('log.txt', mode='wb')
file_obj.write(data)
file_obj.close()

如果不进行转化name.encode('utf-8'),那么运行会报错:TypeError: a bytes-like object is required, not 'str'

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/998263.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号