最近在看《SmoothPython》这本书,想把我的阅读笔记分享给大家,希望对大家有帮助,感谢本书有兴趣但没时间看的人。(文中大部分文字和图片摘录自《SmoothPython》一书和python官网)章节结构:字符字节编码&解码文本文件Unicode具体内容:character字符的定义是一个Unicode字符.字符由代码点(十进制数字)标识,在Unicode标准中,代码点是四个以U+为前缀的十六进制数字。Ex.A=U+0041字符的具体表示取决于所有编码。编码是在代码点和字节序列之间进行转换时使用的算法。Ex.UTF-8,A(U+0041)=x41encoding=codepoint->bytesequence(fortransmissionorstorage)decoding=bytesequence->codepoint(humanreadabletext)bytePython有两个内置序列type,bytes和bytearray,这两种类型对象的每个元素都在0-255bytes对象可以使用给定的编码从str对象构造,每个元素是范围(256)内的整数,bytesobjectSlice或bytesbytearrayobject没有字面量语法,21bytearray()和bytesequenceliteral参数表示bytearray对象的slice或bytearray结构体(struct模块)提供了将packedbytesequence转换成不同类型字段的tuple的函数,使用了一些函数执行反转,将元组转换为打包的字节序列。该模块可以处理字节、字节数组和内存视图对象。内存视图(memoryview)关于共享内存,用于访问二进制序列、打包数组和缓冲区中的数据切片时,不需要复制字节序列字符串对字符序列进行编码和解码字符串的不同编解码器转换时的几个编解码器错误一个字符串,例如,一个无效的UTF-8/UTF-16被替换为一个官方未知字符UnicodeEncodeError当将一个字符串转换为二进制序列时,例如,一个字符替换在目标编码中没有定义,跳过(不推荐),并把UnencodeablecharactersconvertedtoXMLentitiesSyntaxErrorTheencodingofthesourcecodeisnotasexpected在文件顶部添加注释,但最好使用UTF-8你怎么知道的编码字节序列?BOMBOM,byte-ordermark,byteordermark,告诉我们编码类型,Ex.u16=b'xffxfe.......,这部分是告诉我们在编码时使用IntelCPU的littleendiannormalizedUnicode的原因为什么字符串需要规范化Unicode字符串是为了避免在比较字符串时出错,因为同一个字符串可能由于Unicode的构成方式不同而有不同的codepoints,并且永远不会在比较时返回false。我们可以使用unicodedata.normalize函数提供的Unicode规范化。这个函数的第一个参数应该传入一个NFCNormalizationFormCin(NFC,NFD,NFKC,NFKD),就是用最少的码点组成等价的字符StringNFD,NormalizationFormD,把组合字符分解成和字符和单独组合字符NFKC&NFKD是兼容字符的严格规范方法,每个兼容字符都会被兼容分解字符替换,这两种方法最谨慎使用。Unicodesandwichbytes->str:decodetheinputbytesequence100%str:onlyfoxtextstr->bytes:encodetheoutputtext意思是将输入的字节序列解码成Strings(比如读取文件时)Unicode文本排序使用的是PyPI中的PyUCA库(UnicodeCollat??ionAlgorithmUnicodeCollat??ionAlgorithm)
