通过下面一些代码,自己总结是,
python2.7默认ascii,可以通过在开头加入#coding:utf-8来改变编码。
还有一点,不要看到输出结果不是中文就以为编码变了,它只是计算机和人所识别的不同,你print 它,它就显示中文了
unicode是一个通用编码,用来做中转站。
把不同文本,终端显示的变成unicode叫解码,用decode(“你要解码的字符串的编码类型”);
把unicode编程各种编码,用以文本,终端输出叫编码,用encode(“想把unicode编成的类型”);
还有一种情况,例如有这么条语句,
b= ‘\u4f60\u597d’
其实我想给的字符是”你好“,前面没加u,就是说没表明他的unicode身份,它就是一个默认编码的字符串,猜猜 b;print b分别输出什么,
>>> b
'\\u4f60\\u597d'
>>> print b
\u4f60\u597d
那他喵的咋弄成汉字啊?答案就是:
>>> print b.decode("unicode-escape")
下面是一些尝试,我试过后,就不想看了,太乱了,还是整理下吧,为什么我记性不好记性不好,只能乖乖作笔记
首先用两种方式定义两个字符串a,b;a是字符串,b是unicode,见下
#王祖蓝的画面感
>>> a = "我好爱你的,真真的"
#把b定义成unicode类型
>>> b = u"我好爱你的,真真的"
>>> print "a 的类型是{};b的类型是{}".format(type(a),type(b))
a 的类型是<type 'str'>;b的类型是<type 'unicode'>
再看看输出a
,b
和输出print a
,print b
的结果
>>> b
u'\u6211\u597d\u7231\u4f60\u7684\uff0c\u771f\u771f\u7684'
#这个时候a的编码是utf-8,没变
>>> a
'\xce\xd2\xba\xc3\xb0\xae\xc4\xe3\xb5\xc4\xa3\xac\xd5\xe6\xd5\xe6\xb5\xc4'
>>> print a
我好爱你的,真真的
>>> print b
我好爱你的,真真的
b是unicode,a是ascII(应该是吧),print的结果都是中文
用上decode(“unicode-escape”)的话呢,我就不懂下面的了,跳过去
>>> a.decode('unicode-escape')
u'\xce\xd2\xba\xc3\xb0\xae\xc4\xe3\xb5\xc4\xa3\xac\xd5\xe6\xd5\xe6\xb5\xc4'
>>> print a.decode('unicode-escape')
ÎҺð®ÄãµÄ£¬ÕæÕæµÄ
>>> print b.decode('unicode-escape')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)
但是我能理解下面的,b是unicode,当然可以encode成你想要的编码了,这个简单
>>> b.encode('gb2312')
'\xce\xd2\xba\xc3\xb0\xae\xc4\xe3\xb5\xc4\xa3\xac\xd5\xe6\xd5\xe6\xb5\xc4'
>>> b.encode('utf-8')
'\xe6\x88\x91\xe5\xa5\xbd\xe7\x88\xb1\xe4\xbd\xa0\xe7\x9a\x84\xef\xbc\x8c\xe7\x9c\x9f\xe7\x9c\x9f\xe7\x9a\x84'
>>> print b.encode('gb2312')
我好爱你的,真真的
再看看把a编码,下面两条报了同样的错,是不是说encode的时候先解码呢?结果解码的时候范围不对,ascii只有128字符,中文就多了去了,至于最后一条,unicode能解码成unicode吗,吃饱了撑的啊
>>> print a.encode('utf-8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 0: ordinal not in range(128)
>>> print a.decode('ascii')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 0: ordinal not in range(128)
>>> print a.decode('unicode')
LookupError: unknown encoding: unicode