编解码

ASCII:1字节,0-255

GBK2313:常用的汉字,2万多个

GBK:对GBK2313的补充,支持藏文,2个字节表示一个汉字

big5:台湾,繁体字

unicode:万国码,2-4字节,只是在内存中使用,传输或者保存时要编码

UTF:Unicode transformation format

UTF-8:变长,1-4个字节,兼容ASCII,汉字2字节,好处是省空间,但是浪费时间

UTF-16:2字节

UTF-32:4字节

总而言之:

Unicode定义世界每个字符的索引值。

UTF8/UTF16实现Unicode的标准,把字符存储到存储介质中。

py3:

>>> s='a'
>>> type(s)
<class 'str'>
>>> s1=b'a'#py3中前面加b是变成bytes类型
>>> type(s1)
<class 'bytes'>
>>> s == s1
False
>>> s.encode()
b'a'
>>> s.encode() ==s1#编码之后s与s1相等
True
>>> type(s.encode())
<class 'bytes'>
>>> s.decode()#'str'对象没有'decode'属性,不能解码,报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'decode'
>>>

>>> import sys#导入sys
>>> dir(sys)#dir查看用法
>>> sys.getdefaultencoding()#获取当前编码格式
'utf-8'#py中默认编码格式为utf-8
>>>

s = 'a'--->str类型(type)---->unicode编码

s1 =b'a'--->bytes类型(type)---->字节编码(ascii,utf-8,gbk...)

  
encode编码/decode解码
Unicode---->编码----->utf-8,ascii,gbk
utf-8,ascii,gbk---->解码----->Unicod
py3中默认的编码格式是utf-8
utf-8编码中文一般为3个字节,gbk一般是2个字节
 

>>> s="光荣之路测试开发培训"
>>> type(s)
<class 'str'>
>>> s.encode()#不指定编码格式编码
b'\xe5\x85\x89\xe8\x8d\xa3\xe4\xb9\x8b\xe8\xb7\xaf\xe6\xb5\x8b\xe8\xaf\x95\xe5\x
bc\x80\xe5\x8f\x91\xe5\x9f\xb9\xe8\xae\xad'
>>> s.encode("utf-8")#指定utf-8模式,与不指定编码格式得出的结果一致
b'\xe5\x85\x89\xe8\x8d\xa3\xe4\xb9\x8b\xe8\xb7\xaf\xe6\xb5\x8b\xe8\xaf\x95\xe5\x
bc\x80\xe5\x8f\x91\xe5\x9f\xb9\xe8\xae\xad'
>>> s.encode("gbk")#指定gbk编码格式
b'\xb9\xe2\xc8\xd9\xd6\xae\xc2\xb7\xb2\xe2\xca\xd4\xbf\xaa\xb7\xa2\xc5\xe0\xd1\x
b5'
>>> len(s.encode("gbk"))#len内置函数查看长度
20
>>> len(s.encode("utf-8"))
30
>>>

>>> s=b"光荣之路测试开发培训"#字节只能包含ASCII文字字符,这样写会报错
File "<stdin>", line 1
SyntaxError: bytes can only contain ASCII literal characters.
>>> s="光荣之路测试开发培训"
>>> s="光荣之路测试开发培训".encode()#字符串后面直接加.encode来编码跟s.decode()一样
>>> s
b'\xe5\x85\x89\xe8\x8d\xa3\xe4\xb9\x8b\xe8\xb7\xaf\xe6\xb5\x8b\xe8\xaf\x95\xe5\x
bc\x80\xe5\x8f\x91\xe5\x9f\xb9\xe8\xae\xad'
>>> type(s)
<class 'bytes'>
>>> s.decode()#decode解码
'光荣之路测试开发培训'
>>> type(s.decode())
<class 'str'>
>>>

注意:用什么编码就对应的用什么解码,否则会报错或者乱码

>>> s="光荣之路测试开发培训".encode("gbk")#用gbk编码
>>> s
b'\xb9\xe2\xc8\xd9\xd6\xae\xc2\xb7\xb2\xe2\xca\xd4\xbf\xaa\xb7\xa2\xc5\xe0\xd1\x
b5'
>>> s.decode("utf-8")#用utf-8解码
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb9 in position 0: invalid#报错:'utf-8'编解码器不能解码字节0xb9在位置0:无效
start byte
>>>

>>> s.decode("gbk")#用gbk解码
'光荣之路测试开发培训'
>>>

  py2:
>>> s ='a'
>>> type(s)
<type 'str'>
>>> s =u'a'#py2中前面加u就是unicode编码格式
>>> type(s)
<type 'unicode'>
>>> s ="光荣之路测试开发培训"
>>> s
'\xb9\xe2\xc8\xd9\xd6\xae\xc2\xb7\xb2\xe2\xca\xd4\xbf\xaa\xb7\xa2\xc5\xe0\xd1\xb5'
>>> type(s)
<type 'str'>
>>>
 >>> s =u"光荣之路测试开发培训"
>>> s
u'\u5149\u8363\u4e4b\u8def\u6d4b\u8bd5\u5f00\u53d1\u57f9\u8bad'
>>> s =u"光荣之路测试开发培训".encode("gbk")
>>> s
'\xb9\xe2\xc8\xd9\xd6\xae\xc2\xb7\xb2\xe2\xca\xd4\xbf\xaa\xb7\xa2\xc5\xe0\xd1\xb5'
>>> s =u"光荣之路测试开发培训".encode("utf-8")
>>> s
'\xe5\x85\x89\xe8\x8d\xa3\xe4\xb9\x8b\xe8\xb7\xaf\xe6\xb5\x8b\xe8\xaf\x95\xe5\xbc\x80\xe5\x8f\x91\xe5\x9f\xb9\xe8\xae\xad'
>>>
 >>> import sys
>>> sys.getdefaultencoding()#py2中默认使用ascii编码格式
'ascii'
>>>
 >>> s=u"光荣之路".encode()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
>>>
 
练习:
分别在py2和py3下实现:
定义unicode类型的字符串,分别转换成utf-8和GBK
定义UTF-8类型的字符串,转换为GBK
py2
>>> s=u"天天向上"
>>> s.encode("utf-8")
'\xe5\xa4\xa9\xe5\xa4\xa9\xe5\x90\x91\xe4\xb8\x8a'
>>> s.encode("gbk")
'\xcc\xec\xcc\xec\xcf\xf2\xc9\xcf'
>>>
py3
>>> s="天天向上"
>>> s.encode("utf-8")
b'\xe5\xa4\xa9\xe5\xa4\xa9\xe5\x90\x91\xe4\xb8\x8a'
>>> s.encode("gbk")
b'\xcc\xec\xcc\xec\xcf\xf2\xc9\xcf'
>>>
 
 
 
 

1.if 表达式1:

表达式1为真执行

elif 表达式2:

表达式2为真执行

else:

以上所有的表达式都不为真

......

2.命令行里显示缩进模式

>>> while 1:
...     date =input("输入一个字母:")
...     if date == 'a':
...         continue
...     elif date == 'e':
...         break
...     elif date == 'r':
...         word = input("请输入一个字母:")
...     else:
...         print("输入错误!")
...         continue
...
输入一个字母:w
输入错误!
输入一个字母:e
>>>

练习:

输出100以内不能被5整除的数

思路:

1.生成1-100以内的列表

2.判断能否被5整除

3.

for实现

>>> for i in range(1,101):
...     if i%5 ==0:
...         continue
...     else:
...         print(i,end=' ')
...
1 2 3 4 6 7 8 9 11 12 13 14 16 17 18 19 21 22 23 24 26 27 28 29 31 32 33 34 36 37 38 39 41 42 43 44 46 47 48 49 51 52 53 54 56 57 58 59 61 62 63 64 66 67 68 69 71 72 73 74 76 77 78 79 81 82 83 84 86 87 88 89 91 92 93 94 96 97 98 99 >>>
>>>

while实现
>>> num = 1
>>> while num<=100:
...     if num%5 !=0:
...         print(num)
...     num+=1
...
>>>

pytho学习笔记---编码的更多相关文章

  1. java web 学习笔记 编码问题总结

       java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...

  2. 重温Servlet学习笔记--编码问题

    在说编码问题之前,首先先了解一下常见的字符编码: ISO-8859-1:  拉丁编码,不支持中文 gbk,gb2312,gb18030:系统默认编码,是中国的国标码 utf-8: 支持几乎所有语言的编 ...

  3. python 学习笔记-----编码问题

    1.python 最早支持的是ASCII编码. 所以对于普通的字符串"ABC"为ASCII编码的形式.字母和数字之间的转换函数为ord('字母')和chr(‘数字’)函数. ord ...

  4. [原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  5. 【视频编解码·学习笔记】8. 熵编码算法:基本算法列举 & 指数哥伦布编码

    一.H.264中的熵编码基本方法: 熵编码具有消除数据之间统计冗余的功能,在编码端作为最后一道工序,将语法元素写入输出码流 熵解码作为解码过程的第一步,将码流解析出语法元素供后续步骤重建图像使用 在H ...

  6. UFLDL深度学习笔记 (一)反向传播与稀疏自编码

    UFLDL深度学习笔记 (一)基本知识与稀疏自编码 前言 近来正在系统研究一下深度学习,作为新入门者,为了更好地理解.交流,准备把学习过程总结记录下来.最开始的规划是先学习理论推导:然后学习一两种开源 ...

  7. UFLDL深度学习笔记 (七)拓扑稀疏编码与矩阵化

    UFLDL深度学习笔记 (七)拓扑稀疏编码与矩阵化 主要思路 前面几篇所讲的都是围绕神经网络展开的,一个标志就是激活函数非线性:在前人的研究中,也存在线性激活函数的稀疏编码,该方法试图直接学习数据的特 ...

  8. UFLDL深度学习笔记 (五)自编码线性解码器

    UFLDL深度学习笔记 (五)自编码线性解码器 1. 基本问题 在第一篇 UFLDL深度学习笔记 (一)基本知识与稀疏自编码中讨论了激活函数为\(sigmoid\)函数的系数自编码网络,本文要讨论&q ...

  9. MySQL学习笔记5——编码

    MySQL学习笔记5之编码 编码 1.查看MySQL数据库编码 *SHOW VARIABLES LIK 'char%'; 2.编码解释 *character_set_client:MySQL使用该编码 ...

随机推荐

  1. 编译darknet出现libpng16.so.16:对‘inflateValidate@ZLIB_1.2.9’未定义的引用

    cd /usr/lib/x86_64-linux-gnu sudo ln -s ~/anaconda/lib/libpng16.so.16 libpng16.so.16 sudo ldconfig## ...

  2. python day19--面向对象,接口,封装

    #1.接口类,对象类.规范类中方法的统一. # 第一版:三个类,每个类中有相同的方法 # class Alipay: # def __init__(self,money): # self.money= ...

  3. 算法复杂度中的O(logN)底数是多少

    前言 无论是计算机算法概论.还是数据结构书中,关于算法的时间复杂度很多都用包含O(logN)这样的描述,但是却没有明确说logN的底数究竟是多少.算法中log级别的时间复杂度都是由于使用了分治思想,这 ...

  4. Python全栈之路---数据类型—字符串

    字符串:有序的字符的集合,用于存储和表示基本的文本信息,一对单.双.或三引号中间包含的内容称之为字符串 1.特性:有序,不可变(开辟新地址存储字符串,python解释器会定期清空不用了的已存储的) & ...

  5. 20155208徐子涵 Exp5 MSF基础应用

    20155208徐子涵 Exp5 MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode. Exploit:Exploit 的英文意思就是利用,它在黑客眼里就是 ...

  6. vi常用命令及快捷键

    vi常用快捷键 1)移动光标 h :光标左移一个字符j :光标上移一个字符k :光标下移一个字符l :光标右移一个字符 0 :光标移至行首$ :光标移至行尾 H :光标移至屏幕首行M :光标移至屏幕中 ...

  7. Linux 系统下使用dd命令备份还原MBR主引导记录

    https://en.wikipedia.org/wiki/Master_boot_recordhttps://www.cyberciti.biz/faq/howto-copy-mbr/https:/ ...

  8. BZOJ 2277 Poi2011 Strongbox

    题目大意:一个集合A,包含了0~n-1这n个数.另有一个集合B,满足: 1.B是A的子集. 2.如果a.b均在B中,则(a+b)%n也在B中(a=b亦可) 给出k个数ai,前k-1个不在B中,第k个在 ...

  9. 隔离级别简介 (mysql)

    隔离级别:一个事务必须与由其他事务进行的资源或数据更改相隔离的程度.隔离级别从允许的并发副作用(例如,脏读或虚拟读取)的角度进行描述. 定义 编辑 事务指定一个隔离级别,该隔离级别定义一个事务必须与由 ...

  10. Linux 下安装FastDFS v5.08 的php扩展

    php扩展也需要依赖于FastDFS一些库文件,所以请先安装FastDFS,具体请看我之前的文章.   一.安装目录 php安装目录 /data/nmp/php FastDFS源码目录 /data/w ...