字符编码问题
学Python,看到廖老师的文章,介绍了字符编码的问题,就按照文章的内容进行了测试,得到了不太一样的结果。
不过在看结果之前,先总结一下字符编码的历史背景,捋清楚最常见的三种字符编码ASCII,Unicode和Utf-8的差别。
字符编码发展
先看这张表:
字符 ASCII Unicode Utf-8 |
最开始的ASCII只能表示英文和基本的字符,中文是不支持的;
之后的Unicode做了统一处理,无论英文还是其他字符都用2个字节表示,即UCS-2方案,随着世界上各种国家更多字符需要表示,Unicode的2个字节如果无法满足需要,就将采用UCS-4方案,用4个字节表示;
Unicode的问题在于浪费空间,比如普通英文字符,最高8位全是0,鉴于此,产生了Utf-8。Utf-8是对Unicode编码通过一些算法和规则来转换得到的,是变长的编码,英文编码只用1个字节,汉字则是3个字节。
Python2和Python3默认字符编码
Python中默认的字符编码可以执行:
import sys |
Python2和Python3的输出不同,前者为ascii
,后者为utf-8
。