编程基础
硬件与软件:计算机的运行原理(《编码》)
最大的软件:操作系统(维基百科)
自己写软件:数据结构 & 算法(《数据结构与算法分析》 排序算法)
多人写软件:软件工程(代码大全)
0和1的存储
内存中晶体管进行冲放电
1充电
0不充电
维持时间短需要不停充放电(2.1GHz)
数字的存储
十进制->二进制
字符的存储
ASCII码
例:a->01100001(2)->61(16)
中文的存储
GB2312中国国家标准简体中文字符集
GBK字符集——扩展存储生僻字、繁体字、日语、朝鲜语。
所有字符的存储
将全球字符编号===》Unicode字符集
包括日韩文字、藏文、盲文、楔形文字、颜文字、绘文字
2016年6月时,Unicode 总共有 128237 个字符
高性价比存储UNICODE
低性价比
a -> 00000000 00000000 00000000 01100001 = 0061(16)
你 -> 00000000 00000000 01001111 01100000 = 4F60(16)
高性价比 UTF-8
a -> 01100001
你-> 11100100 10111101 10100000
UTF-8是一种编码方式,不是字符集。
00000000 00000000 00000000 01111111(2) 即 0000007F(16) 以下
0XXXXXXX
00000000 00000000 00000111 11111111(2) 即 000007FF(16) 以下
110XXXXX 10XXXXXX
00000000 00000000 11111111 11111111(2) 即 0000FFFF(16) 以下
1110XXXX 10XXXXXX 10XXXXXX
00000000 00011111 11111111 11111111(2) 即 001FFFFF(16) 以下
11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
现实问题
字符集问题
一些古老的国产软件使用GBK,因为当时没有其他选择。
编码问题
JavaScript 使用了 Unicode 字符集,但是没有使用 UTF-8 编码
JavaScript 用了 UCS-2 编码!
因为 1995 年 UTF-16 还没被发明出来, JavaScript 也不想使用 UTF-32
http://www.ruanyifeng.com/blog/2014/12/unicode.html
ES5 无法表示 \uFFFF 之后的字符(如 \u1D306),某些情况下会出 bug