ASCII、Unicode、UTF-8、GBK
入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。
目录
一、定义
1、ASCII
2、Unicode
3、UTF-8
4、GB2312
5、GBK
6、\u和\x
二、相互转化
1、str 与 ASCII
2、str与utf-8
3、str转gbk
4、在编码时想看到底是哪个字符编码失败时,引用try except查看
一、定义
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函数对其进行转化。
二、相互转化
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]])
结果:
异常编码为: ﹒
参考:
字符编码中ASCII、Unicode和UTF-8的区别 - 知乎
彻底搞明白 GB2312、GBK 和 GB18030 - 知乎
\u与\x的区别_\x \u_Takoony的博客-CSDN博客