文章目录
一. 字符集和编码
1. 概念定义
ASCII:8bit 1byte 编排了128个文字符号,只需要7个0或1,但防止不够,多加一位,即8bit
gbk:16bit 2byte Windows默认
unicode:32bit 4byte(万国码,没法使用,只是一个标准)
utf-8:Mac和Linux默认
—英文:8bit 1byte
—欧洲:16bit 2byte
—中文:24bit 3byte
gbk源自于ANSI(一套标准,16bit 2byte,美国人制定,其他人自己添加,源自于ASCII)
utf-8源自于unicode
二者来自不同标准,不能直接转化
gbk(我军密码本)—> 文字 —> utf-8(敌军密码本)
2. 编码和解码
程序员平时遇见的所有数据最终单位都是字节byte
1. 对字符进行编码
下面以示例说明,字符串分别用gbk和utf-8表示的字节数。
执行下面代码,用gbk来对“刘德华”编码,将文字表示成字节的形式
s = "刘德华"
bs1 = s.encode("gbk")
print(bs1)
执行结果如下:
b'\xc1\xf5\xb5\xc2\xbb\xaa'
每一个反斜杠及其后面的内容表示一个字节bye,所以“刘德华”三个汉字用gbk编码是6个字节。
这与上述gbk编码所长字节长度定义相符合(一个字符是2byte的长度)。
同理,用utf-8编码如下图所示:
utf-8的中文字符每个字符占3个byte长度,因此“刘德华”总共为9个字节
2. 将gbk的字节转化成utf-8的字节
首先,得到gbk的编码
bs_gbk = b'\xc1\xf5\xb5\xc2\xbb\xaa'
其次,用gbk解码,将其变成文字符号(即字符串"刘德华“)
str = bs_gbk.decode("gbk")
最后,将得到的字符串用utf-8重新编码,并打印结果
bs_utf8 = str.encode("utf-8")
print(bs_utf8)
就可以得到b'\xe5\x88\x98\xe5\xbe\xb7\xe5\x8d\x8e'
总结:
str.encode("编码方式") #编码
bytes.decode("解码方式") #解码
3. 补充说明
如果是中英文混在一起进行编码
utf-8的中文一个字符站3个字节,都没问题。
而abc是英文,占一个字节,也就是ASCII码,可以正常显示
所以,英文原来是什么,编码也还是什么,gbk也同样如此。ASCII的标准在哪里都适用。
二. 运算符
1. 算术运算
2. 比较运算
大于、大于等于、小于、小于等于、等于、不等于六种关系
3. 赋值运算
需求:a=100 b=20 将a和b的数值进行互换
方法一:(仅适用于python)
a = 100
b = 20
a, b = b, a # 等号右边的是一个元组,在python可以解构
print(a)
print(b)
方法二:
a = 100
b = 20
# 将a的值存储在一个变量tmp中
tmp = a
# 将b的值赋给a,此时a是20,b也是20
a = b
# 将tmp(100)的值赋给b,此时b是100
b = tmp
# 打印结果
print(a)
print(b)
4. 逻辑运算
and 左右两端都是真,结果才是真
or 左右两端最少有一个为真,结果才是真
not 非真即假,非假即真
当三者同时出现时,最好加上括号
如果没有括号,运算级别括号 > not > and > or
5. 成员运算
xxx在xxx中出现了,为真in
xxx不在xxx中出现了,为真not in