什么是字符集、编码
字符(Character)
:在计算机和电信技术中,一个字符是一个单位的字形、类字形单位或符号的基本信息。说的简单点字符是各种文字和符号的总称。一个字符可以是一个中文汉字、一个英文字母、一个阿拉伯数字、一个标点符号、一个图形符号或者控制符号等。字符集(Character Set)
:是指多个字符的集合。不同的字符集包含的字符个数不一样、包含的字符不一样、对字符的编码方式也不一样。例如GB2312是中国国家标准的简体中文字符集,GB2312收录简化汉字(6763个)及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共 7445 个图形字符。而ASCII字符集只包含了128字符,这个字符集收录的主要字符是英文字母、阿拉伯字母和一些简单的控制字符。字符编码(Character Encoding)
:字符编码是指一种映射规则,根据这个映射规则可以将某个字符映射成其他形式的数据以便在计算机中存储和传输。例如ASCII字符编码规定使用单字节中低位的7个比特去编码所有的字符,在这个编码规则下字母A的编号是65(ASCII码),用单字节表示就是0x41,因此写入存储设备的时候就是二进制的 01000001。每种字符集都有自己的字符编码规则,常用的字符集编码规则还有 UTF-8编码、GBK编码、Big5编码等。码点(Code Point)
:有些地方翻译为码值或内码。是指在某个字符集中,根据某种编码规则将字符编码后得到的值。比如在ASCII字符集中,字母A经过ASCII编码得到的值是65,那么65就是字符A在ASCII字符集中的码点。
通俗解释字符集就是把字符放到一起的一个集合。而这个集合的每一个字符都对应一个数字,叫做码点。那么,这样就建立起来数字和字符之间的索引关系。那么,某个字符在计算机中怎么表示,具体占用几个字节等等,这些就需要编码规则来解决了。这个就是字符编码,他来解决根据某个规则来将字符映射到相应的码点上面。
常见字符集
标准ASCII字符集
ASCII(American Standard Code for Information Interchange)
:美国信息交换标准代码,包括英文、数字、符号等。- 标准ASCII使用1个字节存储一个字符,首位是0,总共可表示128个字符。
GBK(汉字内码扩展规范,国标)
- 汉字编码字符集,包含2万多个汉字等字符,
GBK中一个中文字符编码成2个字节的形式存储
。 - 注意:GBK兼容了ASCII字符集。
Unicode字符集(统一码,也叫万国码)
Unicode是国际组织制定的,可以容纳世界上所有文字、符号的字符集。
- 早期提出UTF-32编码,规定所有字符都使用4个字节表示一个字符。当然它存在明显的缺点:占用存储空间,通信效率变低。
- UTF-8编码方案,是现在推荐使用的编码方案。
UTF-8编码方案
- UTF-8是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节、2个字节、3个字节、4个字节。
- 英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节。
技术人员在开发时都应该使用UTF-8编码!
总结
- ASCII字符集:只有英文、数字、符号等,占1个字节。
- GBK字符集:汉字占2个字节,英文、数字、符号占1个字节。
- UTF-8字符集:汉字占3个字节,英文、数字占1个字节。
注意:
- 字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码。
- 英文、数字一般不会乱码,因为很多字符集都兼容了ASCII编码。
笔记参考于:
- https://www.bilibili.com/video/BV1xD4y1y7yc/?p=1
- https://zhuanlan.zhihu.com/p/260192496
本文含有隐藏内容,请 开通VIP 后查看