入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。
目录
一、定义
1、ASCII
2、Unicode
3、UTF-8
4、GB2312
5、GBK
6、\u和\x
7、全角和半角
二、相互转化
1、str 与 ASCII
2、str与utf-8
3、str转gbk
4、在编码时想看到底是哪个字符编码失败时,引用try except查看
5、全角与半角的转化
一、定义
1、ASCII
阐述英语字符与二进制位之间的关系,用一个字节来表示,一共有128种字符(最高位均为0)
2、Unicode
这是一种所有符号的编码。
问题:
Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。
这产生了两个问题:
(1)难以区别Unicode和ASCII
eg:多个字节编码难以分辨是表示一个Unicode,还是多个ASCII组成
(2)存储浪费
一个字符的二进制编码可能存在许许多多的’0‘。
3、UTF-8
UTF-8就是在互联网上使用最广的一种Unicode的实现方式。它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
4、GB2312
第一个汉字编码标准,共收录了 6763 个常用的汉字和字符。这种编码形式可以用来识别文本中是否含有罕见字。
5、GBK
比GB2312收录的文字更多(包括一些繁体字等等)。GBK包含了所有汉字,一般可以用来检验文本中是否存在乱码。
6、\u和\x
\x指16进制,后面跟两位,表示单字节编码
\u指unicode编码,后面跟着4个16进制数,一般为unicode-16。在python中可以使用encode、decode函数对其进行转化。
7、全角和半角
全角占两个字节,汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都是全角字符。在全角中,字母和数字等与汉字一样占据着等宽的位置(实现对齐,大家占的位置一样大)。
半角一个字符占用一个标准的字符位置。半角占一个字节。半角即为 ASCII 方式的字符,在没有汉字输入法起作用的时候,输入的字母、数字和字符都是半角的。
全角和半角主要是针对标点符号来说的,全角标点占两个字节,半角占一个字节。不管是半角还是全角,汉字都要占两个字节。
二、相互转化
1、str 与 ASCII
c = 'a'
print(ord(c)) #str转ascii
num = 23
print(chr(num)) #ascii转str
2、str与utf-8
s = "你"
u = s.encode("utf-8") #str转utf-8
print(u)
print(u.decode("utf-8")) #utf-8转str
#在已知编码的情况想知道其表示的字符
s = b'\xe4\xbd\xa0'
u = s.decode("utf-8") #utf-8转str
print(u)
结果:
b'\xe4\xbd\xa0'
你
你
3、str转gbk
s = "你"
u = s.encode("gbk") #str转gbk
print(u)
print(u.decode("gbk")) #gbk转str
#在已知编码的情况想知道其表示的字符
s = b'\xc4\xe3'
u = s.decode("gbk") #gbk转str
print(u)
结果:
b'\xc4\xe3'
你
你
4、在编码时想看到底是哪个字符编码失败时,引用try except查看
t = 'wuhiu﹒~cicuθ﹒😂﹡▫efef'
try:
t.encode("gb2312")
except UnicodeEncodeError as e:
print("异常编码为:",t[e.args[2]])
结果:
异常编码为: ﹒
5、全角与半角的转化
Python实现全角与半角相互转换_半角小写字符_黄然大悟的博客-CSDN博客
参考:
字符编码中ASCII、Unicode和UTF-8的区别 - 知乎
彻底搞明白 GB2312、GBK 和 GB18030 - 知乎
\u与\x的区别_\x \u_Takoony的博客-CSDN博客