分享

编码(decode与encode)

 昵称7593676 2023-11-12 发布于广东

1. 什么是编码

事实上计算机只认0或1,然而却可以通过计算机来显示文本,这就是靠编码来实现的。
编码其实就是约定的一个协议,比如ASII编码约定了大写字母A对应十进制65,那么在读取一个字符串的时候,看到65,计算机就知道这是大写字母A的意思

由于计算机是美国发明的,所以这个ASCII编码设计时只采用1个字节存储,包含了大小写英文字母、数字和一些符号。但是计算机在全世界普及之后,ASCII编码就成了一个瓶颈,因为1个字节是完全不足以表示各国语言的

大家知道英文只用26个字母就可以组成不同的单词,而汉字光长用字就有好几千个,至少需要2个字节才足以存放,所以后来中国制定了GB2312,用于对汉字进行编码
然后的然后日本,韩国也制定了各自的编码,然后就出现冲突了,就导致了最初计算机上总是容易看到乱码的现象

为了解决这个问题,Unicode编码应运而生。Unicode组织的想法最初也很简单,创建一个足够大的编码,将所有国家的编码都加进来,进行统一标准。
随着问题的解决,新的问题也出现了,如果你写的文本只包含英文和数字,那么用Unicode编码就显得特别浪费存储空间(使用ASCII编码只占用一半的存储空间),所以本着能省一点是一点的精神,Unicode还创造了多种实现方式
比如常见的UTF-8编码就是Unicode的一种实现方式,它是可变长编码。
简单来说就是,当文本是ASCII编码的字符时,它用1个字节存放;而当文本是其他Unicode字符的情况,它将按一定的算法转换,每个字符使用1~3个字节存放。

2. 编码方式属性

GB2312UTF-8Unicode
GB2312编码专门用来解决中文编码的,是双字节的,并且不论中英文都是双字节的;包含全部中文字符;总的来说GB2312编码方式的编码是以中国国情而创造的,在国际上的兼容性不好。UTF-8 编码是Unicode的一种实现方式,因为对于大多数语言,只需要一个字节就能够编码,如果都采用Unicode会极大浪费,于是出现了可变长编码UTF-8。它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。另外,如果是外国人访问你的GB2312网页,需要下载中文语言包支持。访问UTF-8编码的网页则不出现这问题。可以直接访问。这也是为什么大多数的网页是使用UTF-8编码而不是GB2312。目前几乎收纳了全世界大部分的字符。所有的字符都有唯一的编号,这就解决了解码的冲突!但是,unicode把大家都归纳进来,却没有为编码的二进制传输和二进制解码做出规定。

3. decode与encode

decodeencode
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312’),表示将gbk编码的字符串str1转换成unicode编码。encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312’),表示将unicode编码的字符串str2转换成gbk编码。
  1. encode:用于编码

str.encode(encoding='UTF-8',errors='strict')# encoding -- 要使用的编码,如'UTF-8'# errors -- 设置不同错误的处理方案

该方法返回编码后的字符串

u='我喜欢你啊!'str1=u.encode('gb2312')print(str1) # b'\xce\xd2\xcf\xb2\xbb\xb6\xc4\xe3\xb0\xa1\xa3\xa1'

  1. decode:encoding 指定的编码格式解码字符串。默认编码为字符串编码

str.decode(encoding='UTF-8',errors='strict')# encoding -- 要使用的编码,如'UTF-8'# errors -- 设置不同错误的处理方案

该方法返回解码后的字符串

u='我喜欢你啊!'str1=u.encode('gb2312')print(str1.decode('gb2312'))#	我喜欢你啊!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多