彻底搞清楚unicode和utf8编码

彻底搞清楚unicode和utf8编码

一:字符串编码

我们知道,计算机是以二进制为单位的,也就是说计算机只识别0和1,也就是我们平时在电脑上看到的文字,只有先变成0和1,计算机才会识别它的意思。这种数据和二进制的转换规则就是编码。计算机的发展中,有ASCII码,GBK,Unicode,utf-8编码。

  1. 计算机只能处理数字,文本转换为数字才能处理。计算机中8bit作为一个字节(byte),所以一个字节能表示最大的数字就是255
  2. 计算机是美国人发明的,所以一个字节可以表示所有字符,所以ASCII(一个字节)编码就成为美国人的标准编码。ASCII 编码,它仅仅对 10 个数字、26 个大小写英文字母以及一些特殊字符进行了编码。ASCII 码做多只能表示 256 个符号,每个字符只需要占用 1 个字节。
  3. 但是ASCII处理中文明显是不够的,中文不止255个汉字,所以中国制定了GB2312编码,用两个字节表示一个汉字。GB2312还把ASCII包含进去了,同理,日文,韩文等等上百个国家为了解决这个问题就发展了一套字节的编码,标准就越来越多,如果出现多种语言混合显示就一定会出现乱码
  4. 于是unicode出现了,将所有语言统一到一套编码里
  5. 看一下ASCII和unicode编码:
    1)字母A 用ASCII编码十进制是65, 二进制 0100 0001
    2)汉字“中”已经超出了ASCII编码的范围,用unicode编码20013,二进制 0100 1110 0010 1101
    3)A用unicode编码只需要前面补0,二进制就是 00000000 0100 0001
  6. 乱码问题解决了,但是如果内容全是英文,unicode编码比ASCII需要多一倍的存储空间,同时如果传输需要多一倍的传输。
  7. 所以出现了可变长的编码 utf-8,把英文变长一个字节,汉字3个字节。特别生僻的变成 4-6字节,如果传输大量英文,utf8作用就很明显了。

二:Python中的encode()与decode()

Python2里的str是十六进制表示的二进制编码,unicode是一个字符:通俗点来说就是Python2里的str类型是一堆二进制编码,如果不知道是什么字符集那么你除了一堆十六进制数什么都看不出来(当然平时你使用的工具都是能看到的,因为工具已经做了转码),通过decode可以将其按固定的字符集解码,生成unicode字符。

  1. decode英文意思是 解码,encode英文原意 编码
  2. 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码, 即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
  3. decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。
  4. encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘gb2312’),表示将unicode编码的字符串str2转换成gb2312编码。

总得意思:想要将其他的编码转换成utf-8必须先将其解码成unicode然后重新编码成utf-8,它是以unicode为转换媒介的 如:s=‘中文’ 如果是在utf8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。这种情况下,要进行编码转换,都需要先用 decode方法将其转换成unicode

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值