zoukankan      html  css  js  c++  java
  • 八、编码的初识和进阶

    一、编码的初识

    计算机存储文件,存储数据,以及将一些数据信息通过网络发送出去,存储发送数据什么内容?底层都是01010101.

    编码相当于密码本

    最早的密码本:

    • ASCII码:只包含:英文字母,数字,特殊字符。

      0000 0001 : a

      0000 0101 : b

      8bit (位)== 1byte(字节)

      'hello123': 8byte

    • gbk: 英文字母,数字,特殊字符和中文。国标

      一个英文字母: 0000 0001 :                   a  1字节

      一个中文 中: 0000 0001 0100 0001 :   中 2字节

    • Unicode: 万国码:把世界上所有的文字都记录到这个密码本。

      起初一个字符用2个字节表示:

      0000 0001 0000 0011:                             a 2字节

      0000 0001 0100 0001 :                           中 2字节

      后来为了涵盖全部文字:

      0000 0001 0000 0011 0000 0001 0000 0011:  a 4字节

      0000 0001 0100 0001 0000 0001 0000 0011: 中 4字节

      浪费空间,浪费资源。

    • Utf-8:升级:最少用8bit1个字节表示一个字符。

      0000 0011                                                  a 1字节

      ​0000 0011 0000 0011                                欧洲 2个字节

      0000 0011 0000 0011 0000 0011              中: 3个字节

    重点:

    '中国12he' : GBK: 8个字节

    '中国12he' : UTF-8: 10个字节

    8bit = 1byte
    1024byte = 1KB
    1024KB = 1MB
    1024MB = 1GB
    1024GB = 1TB
    1024TB = 1PB
    1024TB = 1EB
    1024EB = 1ZB
    1024ZB = 1YB
    1024YB = 1NB
    1024NB = 1DB

    比如:7.6MB ----> 7.6 * 1024 * 1024 * 8 bits

    8bit (位)= 1byte(字节)       即1个字节=8个位

     

     

    二、编码的进阶

    1. 不同的密码本之间能否互相识别? 不能

    2. 数据在内存中全部是以Unicode编码的,但是当你的数据用于网络传输或者存储到硬盘中必须是以非Unicode编码(utf-8,gbk等等)

    1. bytes

      • 英文:

        str: 'hello '

        ​ 内存中的编码方式: Unicode

        ​ 表现形式: 'hello'

        bytes :

        ​ 内存中的编码方式: 非Unicode

        ​ 表现形式:b'hello'

      • 中文:

        str:


        内存中的编码方式: Unicode

        表现形式:'中国'

        bytes :

        内存中的编码方式: 非Unicode # Utf-8

        表现形式:b'xe4xb8xadxe5x9bxbd'  
      • str ---> bytes 编码

        s1.encode('utf-8')

        s1.encode('gbk')


        #str ---> bytes
        s1 = '中国'
        b1 = s1.encode('utf-8')  # 编码
        print(b1,type(b1))  
        # b'xe4xb8xadxe5x9bxbd'

        b1 = s1.encode('gbk')  # 编码
        # b'xd6xd0xb9xfa' <class 'bytes'>
      • bytes ---> str 解码

        (用什么编码编过去的,就是用什么编码解回来,否则报错)

        b1.decode('utf-8')


        b1 = b'xe4xb8xadxe5x9bxbd'
        s2 = b1.decode('utf-8')  # 解码
        print(s2)
        #中国
      • gbk---> utf-8

        先把gbk转化为Unicode,然后由Unicode转化为utf-8


        # gbk ---> utf-8
        b1 = b'xd6xd0xb9xfa'
        s = b1.decode('gbk')
        # print(s)   #中国(Unicode)
        b2 = s.encode('utf-8')
        print(b2)  # b'xe4xb8xadxe5x9bxbd'
  • 相关阅读:
    古典问题-兔子生兔子
    order by 执行计划索引使用不同的坑
    MybatisPlus 通用枚举无法正确取值
    Arrays.asList 使用细节
    java 生成pdf文件(易上手版)
    Mysql-tinyint使用之实际采坑记
    mysql
    mysql -- froce index 使用
    java基础全套
    javaweb之servlet 全解
  • 原文地址:https://www.cnblogs.com/yangzm/p/10803828.html
Copyright © 2011-2022 走看看