当前位置: 移动技术网 > IT编程>脚本编程>Python > python自测知识点和书籍补充(C4 文本和字节序列)

python自测知识点和书籍补充(C4 文本和字节序列)

2020年07月05日  | 移动技术网IT编程  | 我要评论
文章目录C4 文本和字节序列4.1 字符问题自测答案4.2 字节概要自测答案4.4 了解编解码问题自测答案4.4.1 处理 UnicodeEncodeError自测答案4.4.4 如何找出字节序列的编码自测答案4.5 处理文本文件自测答案C4 文本和字节序列4.1 字符问题自测1. 字符的官方定义是什么编码格式2. 什么是编码?什么是解码3. py3的 str 类型和 Python 2 的 unicode 类型完全等价吗?答案1. “字符”的最佳定义是 Unicode 字符。因此,从 Py

C4 文本和字节序列

4.1 字符问题

自测

1. 字符的官方定义是什么编码格式
2. 什么是编码?什么是解码
3. py3的 str 类型和 Python 2 的 unicode 类型完全等价吗?

答案

1. “字符”的最佳定义是 Unicode 字符。因此,从 Python 3 的 str 对象中获取
的元素是 Unicode 字符,这相当于从 Python 2 的 unicode 对象中获取的元素,而不是从
Python 2 的 str 对象中获取的原始字节序列。

2. 把 str转换成bytes的过程是编码;把 bytes转换成 str的过程是解码。
如果想帮助自己记住 .decode() 和 .encode() 的区别,可以把人类可读的文本看作是“字”正常和不可读的看为“字”中毒的样子。如果“字”中毒了是不是要给他服解药,这就是在解码吧。


在这里插入图片描述

3. 是的,只不过是换了个新名称。
(但是后文的 Python 3 的 bytes 类型却不是把 str 类型换个名称那么简单,而且还有关系紧密的bytearray 类型。)

4.2 字节概要

自测

1. bytes和bytearray 区别,以及它们在python哪个版本出现?
**2. memoryview作用 **

答案

1. Python 3 引入的不可变 bytes 类型和 Python 2.6 添加的可变 bytearray 类型。(Python 2.6 也引入了 bytes 类型,但那只不过是 str 类型的别名,与Python 3 的 bytes 类型不同。)

2. memoryview 类不是用于创建或存储字节序列的,而是共享内存,让你访
问其他二进制序列、打包的数组和缓冲中的数据切片,而无需复制字节序列。例如 Python Imaging Library(PIL) 2 就是这样处理图像的。
注意, memoryview 对象的切片是一个新 memoryview 对象,而且不会复制字节序列。

4.4 了解编解码问题

自测

1. 在处理编码时,常见的三种错误代表什么意思?

答案

1. 虽然有个一般性的 UnicodeError 异常,但是报告错误时几乎都会指明具体的异常:UnicodeEncodeError (把字符串转换成二进制序列时);
UnicodeDecodeError (把二进制序列转换成字符串时)。
如果源码的编码与预期不符,加载 Python 模块时还可能抛出SyntaxError 。接下来的几节说明如何处理这些错误。

4.4.1 处理 UnicodeEncodeError

自测

1. 在编码和解码中处理错的常见的是哪两种?

答案

1. 在这里插入图片描述
➍ error=‘ignore’ 处理方式悄无声息地跳过无法编码的字符;这样做通常很是不妥。
➎ 编码时指定 error=‘replace’ ,把无法编码的字符替换成 ‘?’ ;数据损坏了,但是用户知
道出了问题。

4.4.4 如何找出字节序列的编码

自测

1. 如何找出字节序列的编码?

答案

1. 不能。各种字节流方式编码复杂,我们并不能100%确定是什么编码。然而有的包可以去找到字节流的特定规则,进而告诉你是什么编码。
Chardet 是一个 Python 库,可以在程序中使用。

4.5 处理文本文件

自测

1. 你为什么要使用二进制打开文本文件?
2. 读取文本时并未编码会怎么样?

答案

1. 除非想判断编码,否则不要在二进制模式中打开文本文件;即便如此,也应
该使用 Chardet,而不是重新发明轮子(参见 4.4.4 节)。常规代码只应该使用二进制模式打开二进制文件,如光栅图像。

2.
会受到系统的默认编码产生变化。如下我的电脑实验:
在这里插入图片描述
现在加了一句话,它又回复正常了
在这里插入图片描述

4.6 为了正确比较而规范化Unicode字符串

自测

1. 变音符号或一些难以处理的数学符号在处理起来有什么难度?
2. 变音符号怎么处理?
3. normalize 的四种类型特性?

答案

1. 在不Unicode的两种表示中,虽然两者表示,其实代表的是一种字符。,
在这里插入图片描述

2.
使用 unicodedata.normalize 函数提供的 Unicode 规范化。
这个函数的第一个参数是这 4 个字符串中的一个: ‘NFC’ 、 ‘NFD’ 、 ‘NFKC’ 和 ‘NFKD’ 。

**3. **
先说明UFC和UFD:
另外,西方键盘通常能输出组合字符,因此用户输入的文本默认是 NFC 形式。不过,安全起见,保存文本之前,最好使用 normalize(‘NFC’, user_text) 清洗字符串。NFC 也是 W3C的“Character Model for the World Wide Web: String Matching and Searching”规范。
在这里插入图片描述
但作者在讲解两种的区别时,除了说明它们获得的长度会有所不同以外,其他的并没有说明。如下图我实验后,发现其实它们在得到最终的结果都一样的,因此不必太纠结了。
NFC 和 NFD 可以放心使用,而且能合理比较 Unicode 字符串。对大多数应
用来说,NFC 是最好的规范化形式。
在这里插入图片描述

相较于UFC和UFD这两种只在特殊情况下使用,比如做搜索时,我们不想总渴望用户输入组合字符,这种分解却正好能让用户有更一般的输入。
在这里插入图片描述
在这里插入图片描述

本文地址:https://blog.csdn.net/ngadminq/article/details/107129820

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网