前言
程序中的编码问题你不搞明白,那么你的程序生涯中它会像幽灵一样伴随着你的职业生涯。
首先要搞清楚一个概念:计算机中认识什么?它认识的是010101这种二进制,却不认识中文不认识英文
那么,这个时候问题来了,我们写的英文,写的汉字是怎么转变成机器识别的010101的二进制的数字的呢?
ascii码闪亮登场
0000 0001 8位(bit) == 1个字节(byte)
1024byte == 1KB
1024KB == 1MB
1024MB == 1GB
1024GB == 1TB
1024TB == 1PB
在最初设计ascii码之初,设计者并没有想到有一天计算机会被全世界应用的如此广泛,所以它们只设定了
7位的0000001数字去映射一个英文,每一位都是01两种可能,共2的7次方128种可能,但是预留了一位 0 以备不时之需
所以8位代表一个字节,但是让它不是黄种人的码,他解译不了中文
中文大概有9W多个字,2的16次方也仅仅才6w多,还是包含不了全部的中文,为了解决这个全球化的问题,老美创建了一
个万国码unicode
unicode
1个字节8位代表256种可能,表示所有的英文,特殊字符,数字等等
最开始给了中国2个字节,8位代表一个字节,那么2的16次方6W多种可能也是包含不够
4个字节 2的32次方 代表一个中文字体 包含了全世界的可能,有点浪费了,为了解决这个
问题,utf-8 闪亮登场
utf-8
3个字节2的16次方种可能 代替一个中文
GBK(仅限国内使用,里面全是中文的映射)
2个字节2的8次方种可能 代表一个中文(但是还是包含不够所有的中文)