关于unicode的学习

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

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的结果

>>> 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值