字符编码和序列化

作者: Apolo_Du | 来源:发表于2018-01-22 12:12 被阅读31次

    Bytes 和罐头, unicode 和食物

    • Bytes 字节数据是存储在硬盘中的二进制数据, 是 unicode 数据经过编码得来, 用于存储和传输. ( 食物需要密封成罐头才能保存和传输 )

    • unicode 数据, 是计算机内存中统一使用的数据类型, 是内存中运行的程序能"理解"的数据, 由 Bytes数据解码而来. ( 罐头需要解封才能食用 )

    • Bytes 数据和 unicode 数据之间, 存在着编码和解码的对应关系.

    字符编码 和 字典

    • 常见的 ASCII, UTF-8, GBK 都是在unicode数据和 Bytes数据的转换过程中所使用的编码.

    • 默认地, 程序会根据当前计算机系统使用的字符编码来确定使用的"字典".

    • 解码:

      • 在读取硬盘文件的时候, 软件根据当前环境使用的 "字典" (字符集)来 "翻译文件" (将硬盘上的二进制数据解码为unicode数据).
    • 编码:

      • 在存储数据到硬盘上的时候, 软件根据 字符集将 unicode 数据编码为二进制数据.
    • 在网络传输数据的时候, 传递的都是二进制数据.

    • 处理数据的双方使用统一的字符编码是必要的

      • 使用不一致的字符编码就好比是 "依赖英汉词典来翻译西班牙语" .

      • 为此我们会在 shebang 指示解释器使用特定的字符编码.

     -*- coding: utf-8 -*-
    
    • 在HTTP请求头和响应头中指示使用的字符集

      • HTTP响应头

    食物的密封和罐头的拆封 : 序列化和反序列化:

    • 序列化
      • 将内存中的数据(unicode) 变成可存储传输数据(二进制数据) 的过程.
    • 反序列化:
      • 将二进制数据 解码成 unicode数据的过程.

    应用场景:

    • 了解了序列化和反序列化之后, 我们就可以很容易地理解那些需要转换数据类型的场景:
      • server socket 和 client socket 之间的数据交互:
        • socket.send() 只能发送bytes数据
    • 前端使用 Ajax 和服务器交互
    • 向文件写入数据, 读取文件

    相关文章

      网友评论

      • PGOne爱吃饺子:大佬 根据你写的这个意思,编码和序列化是一个东西了,都是转成成二进制数据?是不是?谢谢

      本文标题:字符编码和序列化

      本文链接:https://www.haomeiwen.com/subject/eddlaxtx.html