美文网首页Fluent Python
文本与字节序列

文本与字节序列

作者: 一块大番薯 | 来源:发表于2017-12-28 16:48 被阅读25次

    字符问题

    字符的标识:码位,是数字,如 Unicode 标准下 A 的码位是 U+0041
    字符的具体表述取决于编码:如 A(U+0041)在 UTF-8 下编码成 \x41

    字节概要

    (1)bytes 不可变,bytearray 可变
    (2)bytes 与 bytearray 各元素是 range(256) 中的一个
    (3)切片返回同类型的二进制序列
    (4)二进制序列是整数序列,字节的值有三种表现形式:ASCII (空格到~)、\t \r \n \\、十六进制转义


    bytes 和 bytearray
    • bytes 与 bytearray 构造方法
      最后一种构造方法,使用缓冲类对象创建分两种情况:一是使用 array 创建,会始终复制源对象的字节序列,二是使用 memoryview 对象创建,则允许共享内存(类似 PIL 处理图像)。


      构造方法
      码位构造
    • struct 与 memoryview
      struct 用于从二进制序列中提取结构化信息。即把打包的字节序列转换成 tuple ,或者反向转换。
      可作用于bytes、bytearray、memoryview 对象
      例子中,header 是一个 memoryview 对象,使用 struct.unpack 传入一定格式,最终转换成 tuple


      struct 用法

    编解码器(codec,encoder、decoder)

    • utf_8 别名:utf-8、utf8、U8
      函数 open()、str.encode()、bytes.decode() 中作为参数 encoding 的值
    • 纯文本不包含空字符 \x00
    • 解决解编码出错一个小技巧:传入参数 errors='replace' 或者 'ignore'
    • 统一字符编码侦测包 chardet


      chardetect
    • BOM(byte-order mark)字节序标记
      b'\xff\xfe' 这就是 BOM,此处使用的是小字节序 CPU
      小字节序:低位在前,高位在后
      这与 utf-16 编码有关,utf-16le 使用小字节序,utf-16be 使用大字节序
      有些编辑器如 notepad 在 utf-8 文件中也加了 BOM,自作聪明。


      BOM

    处理文本文件

    不能依赖设备默认编码,打开文件是应明确传入 encoding 参数


    encoding

    默认使用文本模式,即 TextIOWrapper,我的设备默认编码是 cp936
    'rb' 表示二进制模式读取文件,返回 BufferedReader 对象


    对象

    此处省略了非常多很少见的情况。

    杂谈
    • 纯文本
      所有字节都表示文本字符 ,如 HTML
      非纯文本 xsl、png 有些字节表示打包的二进制值,如浮点数,rgb值

    相关文章

      网友评论

        本文标题:文本与字节序列

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