资讯专栏INFORMATION COLUMN

流畅的 Python - 3. 文本与字节

e10101 / 679人阅读

摘要:不同编码器编码的相同的字符,最终的字节大小可能会不同。对于和,是由于对应编码不能处理字符串字节导致的。在另外两个规范化形式和的首字母缩略词中,字母表示兼容性。最后是双模,同一函数能接受字符串和字节进行操作。

对于字符串,我们接触得挺多的。而编码问题,也不时令人头疼的。

由于一开始接触的就是 Python3,所以一些在 Python2 上的编码上的坑我没遇到,甚至在 Python3 上都很少遇到编码问题,因为 Python3 默认的编码是 utf-8,而之前又从 Windows 转到了 Arch,编码问题已经很少遇到了。

不过还是要重新认识一下字符与字节。字节可由指定字符串编码得到,是不可变类型。使用下标获取字节的值时,返回的是整数。这个是没想到的。很多适用于 str 对象的方法也适用于 bytes 对象。

struct 模块提供了一些函数可把字节序列与其他不同的类型互相转换。memoryview 用于共享内存,前面刚碰到过。

除了 utf-8 编码,Python 还内置了许多其他的编码器。不同编码器编码的相同的字符,最终的字节大小可能会不同。

对于 UnicodeEncodeError 和 UnicodeDecodeError,是由于对应编码不能处理字符串 / 字节导致的。而 SyntaxError,则是由于没有声明编码,平台编码不能处理对应模块的 .py 文件。

在处理文件文件时,建议是指定编码打开或写入,不然跨操作系统运行脚本可能会出错。

之后,讲到了规范化 Unicode 字符串。之前是一直没想过这样的问题,一些特殊字符,该怎么搜索?这里给出了答案,那就是使用 unicodedata.normalize 函数提供的

Unicode 规范化。它有四个参数:NFCNFDNFKCNFKD

 NFC(Normalization Form C)使用最少的码位构成等价的字符串,而 NFD 把组合字符分解成基字符和多带带的组合字符。

在另外两个规范化形式(NFKC 和 NFKD)的首字母缩略词中,字母 K 表示“compatibility”(兼容性)。

一般使用 NFC 保存字符串。后两种转换会有格式损失,但在搜索中却很有用。

还有就是大小写折叠,不仅仅是忽略大小写,而且把其他一些符号改变。书上还介绍了一规范化——把变音符号去掉。

对 Unicode 字符的排序,可使用 key 关键字参数获得我们想要的排序结果。之后就是 Unicode 数据库,里面保存了各种关于 Unicode 的消息。

最后是双模 API,同一函数能接受字符串和字节进行操作。

书上很多问题都没怎么遇到,也没想到会这么复杂,不过相信以后会接触到的。慢慢消化吧。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41583.html

相关文章

  • MySQL中常用SQL语句编写

    摘要:简述之前一直使用的的模型,最近想学习下原生语句的编写。以后工作中可能不使用,为了更好的工作和提高自己的知识全面点,记录下常用的语句编写。物理内存设置规则通过比较和状态的变量,可以看到这个变量的作用。关键字用于定义列为主键。 简述 之前一直使用的django的orm模型,最近想学习下原生sql语句的编写。以后工作中可能不使用django,为了更好的工作和提高自己的知识全面点,记录下常用的...

    ChristmasBoy 评论0 收藏0
  • 流畅python读书笔记-第四章 编码问题

    摘要:处理文本的最佳实践是三明治要尽早把输入例如读取文件时的字节序列解码成字符串。这种三明治中的肉片是程序的业务逻辑,在这里只能处理字符串对象。 处理文本的最佳实践是Unicode 三明治 要尽早把输入(例如读取文件时)的字节序列解码成字符串。 这种三明治中的肉片是程序的业务逻辑,在这里只能处理字符串对象。 在其他处理过程中,一定不能编码或解码。 对输出来说,则要尽量晚地把字符串编码成字...

    leone 评论0 收藏0
  • Python学习之路23-文本字节序列

    摘要:字符编码表,码位码元将编码字符集中的码位转换成有限比特长度的整型值的序列。字符编码方案,码元序列化也称为常说的序列化。每个字节里的二进制数就是字节序列。另一个情况则是压缩字节序列的值,如或进程长度编码等无损压缩技术。 《流畅的Python》笔记。本篇主要讲述不同编码之间的转换问题,比较繁杂,如果平时处理文本不多,或者语言比较单一,没有多语言文本处理的需求,则可以略过此篇。 1. 前言 ...

    anRui 评论0 收藏0
  • 流畅python读书笔记-第一章Python 数据模型

    摘要:第一章数据类型隐式方法利用快速生成类方法方法通过下标找元素自动支持切片操作可迭代方法与如果是一个自定义类的对象,那么会自己去调用其中由你实现的方法。若返回,则会返回否则返回。一个对象没有函数,解释器会用作为替代。 第一章 python数据类型 1 隐式方法 利用collections.namedtuple 快速生成类 import collections Card = collec...

    tomener 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<