1、计算机中的字符编码问题
- 最早是ASCII编码,美国人发明,所以只把127个字符进行编码,只需要一个字节,字符A的编码是65,字符z编码是122。
- 中文字符显然一个字节编码不够,且为了不和ASCII冲突,制定GB2312编码,至少需要两个字节进行编码。
那么,世界上各种语言有各种语言的编码,那么在多语言混合的文本中,显示会有乱码。
- 所以,出现了Unicode编码,通常使用两个字节(生僻字符会用到四个字节)编码所有的语言字符。但是在大多是英字符的文本中,这种编码在存储和传输上非常不划算。
- 之后出现了UTF-8编码,根据字符的不同大小使用1-6个字节编码。通常英文是一个字节,汉字是三个字节,生僻字符4-6个字节。
UTF-8还有一个好处,ASCII编码可以看做UTF-8编码的一部分,在ASCII下历史遗留软件可以在UTF-8环境下继续工作。
2、现在计算机系统通用的字符编码工作方式
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:
浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:
3、python中的字符编码
在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言。