关于unicode的学习

来源:互联网 发布:wear it on 编辑:程序博客网 时间:2024/06/05 02:11

通过下面一些代码,自己总结是,

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'>

再看看输出ab和输出print aprint b的结果

>>> bu'\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
0 0
原创粉丝点击