【1.39】字符编码
>>> u'你好'
u'\u4f60\u597d'
>>> u'你好'.encode('utf8')
'\xe4\xbd\xa0\xe5\xa5\xbd'
>>> u'你好'.encode('gbk')
'\xc4\xe3\xba\xc3'
>>> u'你好'.encode('utf8').decode('gbk')
u'\u6d63\u72b2\u30bd'
>>> print u'你好'.encode('utf8').decode('gbk')
浣犲ソ
如上面的代码所示, "你好"两个汉字字符的unicode分别为4f60和597d,
utf-8编码后占6个字节, 一个汉字 三个字节
而gbk编码后占4个字节. 一个汉字 两个字节
如果用utf8编码后错误地用gbk来解码,
就会得到3个unicode码点,分别表示字符浣
,犲
和ソ
;
而如果用gbk编码后
错误地用utf8来解码, 则在解码第二个字符时无法凑够3个字节, 因此会得到未知的结果, 甚至会因为内存越界访问引起程序异常.