经过python3学习编码

简介

今天在写python程序的时候,遇到了编码问题,今天,我准备好好了解一下编码问题python

ASCII编码

计算机是美国人发明的,最初只有不超过256字符须要编码,1字节能编码2**8个,因此ASCII编码就是这么来的。如今的键盘,不用输入法能打出来的字符,都在ASCII码表里。编程

其余编码

后来,计算机逐渐普及,须要编码其余国家的字符,好比中文,日文,韩文,中国有GB2312等(固然,会占用多个字节),其余国家也有各自的编码表。可是这有个问题,若是一串字符有多个国家的语言,没法处理。json

Unicode

Unicode将各类国家字符统一编码。这样便解决了统一编码的问题。Unicode很是适合在内存中使用,同一种语言,编码格式是相近的,便于计算。可是,当须要存储的时候,就不太合适了,浪费空间。编码

ustring = '中'
print('--- Unicode ---')
ubyte = ustring.encode('unicode_escape')
print(len(ubyte))
print(ubyte)  # 直接输出第一个\是转义
print(''.join([chr(c) for c in ubyte]))

输出结果:code

--- Unicode ---
6
b'\\u4e2d'
\u4e2d

能够看到,一个中文的字,就占了6个字节,编码其实只有4个字节4e2d,但\u,也要存储内存

UTF-8

为了便于减少传输和存储的大小,UTF-8编码出现了。一样是utf-8

print('--- UTF-8 ---')
ubyte = ustring.encode('utf-8')
print(len(ubyte))
print(ubyte)
print(''.join([chr(c) for c in ubyte]))

输出以下:ci

--- UTF-8 ---
3
b'\xe4\xb8\xad'
ä¸-

只占用了3个字节,\x是python加上去的,表明16进制方式读取,也就是e4, b8, ad这三个字节。可能会有人不知道e4为啥是一个字节,16进制和2进制对应以下,占4位,一个字节8位,因此是两个字符unicode

0 = 0000
1 = 0001
...
a = 0110
...
e = 1110
f = 1111

json的编码

为啥今天我会想好好了解一下编码呢,由于我在编程的时候用到了json,有趣的是,python中json的编码方式默认使用的不是utf-8,而是unicode,我还傻傻分不清楚,晕了半天。不过使用json.dumps和json.loads其实根本遇不到这个问题string

相关文章
相关标签/搜索