不是我轴,非要用2.7(笔试题一般python的只支持2.7),日常我一直用3.0,然后某天我报了HW的笔试题,第一道是字符串的,我当时就开心了。字符串啊,我最会了!
BTW,看了题目就知道自己有多辣J,题目要求接收一个Unicode形式的字符串,然后输出。
当时我就懵了,哈?编码不是只有UTF-8和ASCii么?
-
二进制、Ascii、Unicode、UTF-8之间的关系 -
具体操作与实现
二进制、Ascii、Unicode、UTF-8之间的关系
二进制:
计算机里面所有信息最后都是以二进制处理或者显示等,一个字节有8位,每位有两个状态'0'和'1',因此一个字节可以表示256种状态。
Ascii:
那么问题来了我们怎么把我们已知的字母等语言表示成二进制呢,那么这之间肯定有一种约定俗成或者说是“协议”一样的东西。那么Ascii码就定义了大小写字母特殊字符的二进制表示形式。它在一定范围内解决了一部分问题。
同时也抛出y了问题:也就是说这也只能将英文转换成二进制进行存储,那么世界上这么多语言,他也解决不了啊?
anyway这个问题提出来以后就必须说到下面x两种编码了:
Unicode:
中文用一个字节来表示显然不够,所以至少要两字节,还不能跟Ascii码冲突,Unicode编码就用了一套编码来表示所有语言。Unicode是解决了语言的问题,但是引出了新的问题因为Unicode中都是两字节表示一个字,浪费存储空间啊!,然后就引出了另外一套
UTF-8:
可变长的编码,因为汉字2-6字节,但是数字如果和Unicode使用一套标准太浪费空间,所以出现了可变长的UTF-8,在存储空间上这个问题得到了优化,数字被转化为一个字节,汉字被转化为2-6个字节。
#coding=utf-8
print('Unicode:')
print(repr(u'Unicode编码'))
# 二进制编码演示
print(u'二进制编码:')
print(repr('Unicode编码'))
cons:

可以看出二进制与Unicode的区别:
所以可以使用encode与decode相互转化。
decode的作用是将其他编码的字符串转换成unicode编码。 encode的作用是将unicode编码转换成其他编码的字符串。
python2.7内置的默认环境为ascii,所以如果不属于ascii范畴内,就会乱码,通常我们会在开头加上#coding=utf-8
所以转换的时候Unicode属于中间变量,搭了一个桥。
#coding=utf-8
'''unicode'''
ss=u'编码'
print(repr(ss))
s=ss.encode('utf-8')
print(repr(s))
'''utf-8'''
s1='编码'
print(repr(s1))
s1=s1.decode('utf-8')
print(repr(s1))
输出如图:
