前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >流畅的 Python - 3. 文本与

流畅的 Python - 3. 文本与

作者头像
py3study
发布2020-01-02 17:27:37
6760
发布2020-01-02 17:27:37
举报
文章被收录于专栏:python3python3

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

由于一开始接触的就是 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,同一函数能接受字符串和字节进行操作。

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档