彻底搞清楚unicode和utf8编码

彻底搞清楚unicode和utf8编码

1、计算机只能处理数字(0和1),文本转换为数字才能处理。计算机中8个bit作为一个字节,所以一个字节能表示最大的数字就是255

2、计算机是美国人发明的,所以一个字节可以表示所有字符了,所以ASCII(一个字节)编码就成为美国人的标准编码

3、但是ASCII处理中文明显是不够的,中文不止255个汉字,所以中国制定了GB2312编码,用两个字节表示一个汉字。GB2312还把ASCII包含进去了。同理,日文,韩文等上百个国家为了解决这个问题就 都发展了一套字节的编码,标准就越来越多,如果出现多种语言混合显示就一定会出现乱码

4、于是,unicode出现了,将所有语言统一到一套编码里

5、看一下ASCII和unicode编码:

    (1)字母A用ASCII编码十进制是65,二进制是0100 0001

    (2)汉字“中”已经超过了ASCII编码的范围,用unicode编码是2013,二进制是01001110 00101101

    (3)A用unicode编码只需要在前面补0,二进制是00000000 0100 0001

6、乱码问题解决了,但是如果内容全是英文,unicode编码比ASCII需要多一倍的存储空间,同时如果传输传输需要多一倍的传输。

7、所以出现了可变长的编码"utf-8",把英文变长一个字节,汉字3个字节。特别生僻的变成4-6个字节,如果传输大量的英文,utf8作用就很明显了



windows:

    python2:

        >>> s = "abc"
        >>> su = u"abc"
        >>> s.encode("utf8")
        'abc'
        >>> su.encode("utf8")

        'abc'

        >>> s = "我用python"
        >>> su = u"我用python"
        >>> s.decode("gb2312").encode("utf-8")

        '\xe6\x88\x91\xe7\x94\xa8python'

        >>> su.encode("utf-8")

        '\xe6\x88\x91\xe7\x94\xa8python'

    python3:

        >>> s = "我用python"
        >>> s.encode("utf-8")
        b'\xe6\x88\x91\xe7\x94\xa8python'

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值