字符、字符集、编码——Something Every Programmer Should Know About
来源:互联网 发布:网络协议的作用 编辑:程序博客网 时间:2024/06/06 03:16
看完《Joel on software》上的《The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)》之后,觉得对UTF-8、Unicode、ASCII之类的字眼的有种茅塞顿开的感觉,在用Python2时碰到的种种字符串问题总算是有了个答案,也明白了为什么现在是UTF-8的世界。下面是我阅读过程中做的一些笔记,希望对你有用!
字符、字符集、编码:
- (此时是英语的世界,所谓的字符集指所有英文字母以及一些其他符号)
- ASCII编码——使用7个bit
- 一个byte有8个bit,还有一个bit没被ASCII使用
- OEM编码——包含很多个字符集,free-for-all,大家用各种不同的方式使用第8个bit;不同的方式加在一起叫做ANSI字符集,每种不同的使用方式叫做code page
- (此时加入了一些亚洲字母,字符集在上面字符集基础上扩充)
- 很多亚洲字母,8个bit放不完,于是有了DBCS编码(double byte character set)
- 互联网出现,上面那一堆开始崩溃,于是Unicode字符集出现
- Unicode是为了建立一个单一的字符集,它可以囊括这个星球上所有的书写系统
- 在Unicode字符集中,一个字符被表示为一个code point(U+XXXX),里面的字母8进制
- 字符集怎么存进内存或者表示在email里面呢?需要编码
- 最早是全部2个bytes(UTF-16编码、UCS-2编码),但是如U+0048,是存储为high-endian还是low-endian呢(会影响CPU运算速度),不同机器不同的偏好,所以出现了BOM(Unicode Byte Order Mark,利用文档开头的FF、FE判断是high-endian还是low-endian)
- 问题是,只用英语的人开始抱怨要用比以前更多的空间,而且以前用ANSI和DBCS编码的文档也没人转换他们
- 于是UTF-8编码出现了,0-127仍然是一个byte,其他依次增加byte,从2-6不等——UTF-8英语文本和用ASCII的一模一样
- 还有其他的一些编码方式,如UTF-7编码、UTF-32(UCS-4)编码
- 编码问题自此全部解决!
- 最重要的!世界观可以改变了,现在是Unicode字符集的世界观——你可以将所有letter看做是code point。你可以对这些code point进行旧式编码方式进行编码,例如ASCII等,但是会有错,会有问号、方格;或者用新式编码进行编码,例如UTF-7、8、16、32都可以
- 至于这么个囊括所有东西的字符集Unicode是怎么得来的,反正有人冒着各种风险,各种政治因素,把它捣弄出来了!
- 给你一个字符串但是不给你编码方式,是没用的!
- 0-127的还好,128以上的只能呵呵。
- HTML的Content-Type
- IE还能去猜你的编码= =
0 0
- 字符、字符集、编码——Something Every Programmer Should Know About
- What Every Programmer Should Know About Memory
- What every programmer should know about memory
- what every programmer should know about memory
- What every programmer should know about memory
- 《What Every Programmer Should Know About Memory》在线阅读地址
- note What Every Programmer Should Know About Memory
- 【翻译】what every programmer should know about time
- What every programmer should know about memory, Part 1
- What every programmer should know about memory, Part 1
- 读《What every programmer should know about memory》,小结
- Should know something about OS
- 100 Vim commands every programmer should know
- 97 Things Every Programmer Should Know
- 97 Things Every Programmer Should Know
- 97 Things Every Programmer Should Know
- 12 Things Every Programmer Should Know
- 97 Things Every Programmer Should Know
- hdu 4501 多维背包
- 079 Word Search[Leetcode]
- 记我的WiFi音箱之一个网络在线播放及本地播放音乐器(序)
- java之super用法
- 给Nsstring增加一个类方法:计算某个字符串中的阿拉伯数字的个数
- 字符、字符集、编码——Something Every Programmer Should Know About
- 进程间通信
- 机器学习与数据挖掘工程师的发展方向总结
- HDOJ 5340 Three Palindromes
- 趣味数组(二)
- PostgreSQL JDBC:查询和处理结果
- MD5 C++源码
- iOS开发笔记---深入浅出 iOS 之多线程 NSThread
- 欢迎使用CSDN-markdown编辑器