zoukankan      html  css  js  c++  java
  • 关于字符,字节与base64编码的理解

    字符是用来显示的,如中文字符,英文字符,其类型我字符(串)类型;

    字节是用来存储的,一个字节为8bit。由于字节是8位,无法对中文编码,因此诸如a=b'中文'的写法是错误的。但英文标点数字是可以的,如a=b'abc';

    字符要存储在计算机中或进行传输,就要转化成字节,就涉及的编码方式。为了兼顾统一和内存节省的原则,编码方式有很多。

    对字符编码采用encode(encoding,optional)方法,参数1为编码方式,如utf-8,base64,参数2为可选参数。

    对字节解码用decode(encoding),参数表示解码方式。

    记住:带b的类型为字节(bytes)型,不带b的,为字符类型。二者是不同的数据结构。

    base64模块:

    产生原因:base64模块将一串字节码(二进制流)以6个bit为一组进行编码,(因为6个比特表示的字符在ascii码中是可见字符),所以base64的存在是将所有的字符(可见不可见)转化成可见字符。这样做的原因是避免传输过程中因为不可见字符的存在而容易出错。

    编码方式:由于是6个bit为一组,而正常编码是8bit为一组,因此3个字节的字符可以编码出4个字符,这4个字符都可见。

    因为是将字节码编码,所以base64.b64encode()只能处理字节流。

    base64编码可以将二进制文件(如图片,音频等)编码成文本文件进行传输,到目的地后,再解码成二进制文件,这样有助于加快传输(因为不同类型的数据再网络上以不同的方式传送,耗时)。

    例如图片:

    import b64base
    with open('cat.jpg','rb') as fp:
        bPic=fp.read()#将图片转化成二进制数据
    b64Pic=base64.b64encode(bPic)#将图标编码成b64格式(仍然是二进制)
    b64strPic=b64Pic.decode()#将二进制转成字符串
     
    with open('cat.jpg','wb') as fp:
        bPic=base64.b64decode(b64strPic)#将b64转化成二进制(这里使用b64Pic也可以,b64解码既可以是字符串也可以是对应字符串二进制,结果都一样)
        fp.write(bPic)#转化成图片

  • 相关阅读:
    Codeforces 992C(数学)
    Codeforces 990C (思维)
    Codeforces 989C (构造)
    POJ 1511 Invitation Cards(链式前向星,dij,反向建边)
    Codeforces 1335E2 Three Blocks Palindrome (hard version)(暴力)
    POJ 3273 Monthly Expense(二分)
    POJ 2566 Bound Found(尺取前缀和)
    POJ 1321 棋盘问题(dfs)
    HDU 1506 Largest Rectangle in a Histogram(单调栈)
    POJ 2823 Sliding Window(单调队列)
  • 原文地址:https://www.cnblogs.com/zhuluqing/p/8830456.html
Copyright © 2011-2022 走看看