博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中的内容编码
阅读量:4708 次
发布时间:2019-06-10

本文共 1597 字,大约阅读时间需要 5 分钟。

一、python编码简介 

1)编码格式简介

python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ASCII),ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode

  Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,注:此处说的的是最少2个字节,可能更多。

  UTF-8,是对Unicode编码的压缩和优化,不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存。所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(python3.x默认UTF-8)。

a="明"# 查看a中的方法print(dir(a))# 显示a的数据类型print(type(a))# 显示a的码值print(ord(a))# 26126# 将码值转换成对应的字符print(chr(26126))# 明
a="明天"# len-字符的长度print(a.__len__())# bytes的长度print(a.encode("utf-8").__len__())

 

  在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:

  浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器,所以你看到很多网页的源码上会有类似<meta charset="UTF-8" />的信息,表示该网页正是用的UTF-8编码。

 

2)byte

  由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes,bytes的每个字符都占有一个字节。反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:

# 编码a="ABC"print(a.encode("utf-8"))b="小明"# 会报错,中文超出了ascii范围# print(b.encode("ascii"))print(b.encode("utf-8"))# b'\xe5\xb0\x8f\xe6\x98\x8e'# 解码print(b'\xe5\xb0\x8f\xe6\x98\x8e'.decode("utf-8"))print(b"abc".decode("ascii"))

1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。在操作字符串时,我们经常遇到str和bytes的互相转换。为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换。

 

转载于:https://www.cnblogs.com/janghe/p/7455459.html

你可能感兴趣的文章
利用python进行泰坦尼克生存预测——数据探索分析
查看>>
pow log 与 (int)
查看>>
索引的分类--B-Tree索引和Hash索引
查看>>
C++ 用循环链表解决约瑟夫环问题
查看>>
POJ 2031 Building a Space Station (计算几何+最小生成树)
查看>>
hdu 1394 Minimum Inversion Number
查看>>
AcCoder Contest-115 D - Christmas
查看>>
Java基础知识(JAVA之泛型)
查看>>
css3动画与2D、3D之间的转换
查看>>
[Android]仿新版QQ的tab下面拖拽标记为已读的效果
查看>>
[Android]Android MVP&依赖注入&单元测试
查看>>
循环控制
查看>>
Python学习笔记——参数axis=0,1,2...
查看>>
【原创】Talend ETL Job日志框架——基于P&G项目的一些思考和优化
查看>>
深入了解sql语句以及应用实例
查看>>
如何使用ShareSDK实现Cocos2d-x的Android/iOS分享与授权
查看>>
求欧拉函数
查看>>
2018/01/01Java基础学习——如何通过dos系统的javadoc命令生成API文档
查看>>
LaTex公式在线转图片
查看>>
hadoop学习2----HDFS操作
查看>>