当前位置: 首页 > 文档资料 > Python 学习笔记 >

编码

优质
小牛编辑
126浏览
2023-12-01

编码要闻

所谓编码,是因为我们要把汉字,英文单词等,转化为二进制的数字,因为计算机只认识数字。 最开始的编码是ascii,当时还只能储存英文和某些字符,但是因为中国等其它国家并不使用英语,所以我们开始有了自己的编码,但是这个时候就出现了问题,因为它会不能避免的出现一些重合的东西,这个时候就出现了乱码,然后世界开始使用了unicode,不过它有个缺点就是它总是两个字节的储存东西,所以会造成资源的浪费,这个时候又出现了著名的utf-8它有个很好的地方就是兼容了ASCII,英语就使用ASCII如果是汉字的花就使用多字节储存,所以现在世界通用的编码就是utf-8

通常在计算机的内存中使用的是Unicode编码,在硬盘中使用的是utf-8的编码。

<meta charset="utf-8">

这个意思就是说,当浏览器去处理这个DOM树的时候使用utf-8的编码去处理。

那么在脚本语言Python3中又用了什么编码呢?

答案是Unicode

Python提供了2个方法来管理字符和数字

  • chr( )--- 函数把编码转换为对应的字符
  • ord( )--- 函数获取字符的整数表示

print(ord('托'))

25176

print(chr(25176))

托

改变

由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。

如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。

Python对bytes类型的数据用带b前缀的单引号或双引号表示:

x = b'ABC'

以Unicode表示的str通过encode()方法可以编码为指定的bytes,

反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法

  • encode() 从str字节变成bytes(b'')
  • decode() 从bytes变成字节 ('')

要计算str包含多少个字符,可以用len()函数:

>>> len('ABC')
3
>>> len('中文')
2

注意len是计算多少字符并不是多少字节。

注意

len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数:

>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6

也就是说 英语中一个字符就是一个字节,中文中一个字符通常是3个字节。所以中文占用的空间要大一些。

保存文件

由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

前者让类Unix系统知道,这是个Python3执行文件

后者是说这个文件中使utf-8去读取源代码。

字符的替换


'hello %s' % '11'
'hello 11'

这是在Python命令行中演示的,通常情况下它不使用print也可以,并且使用这个方式来进行替换

注意

但是直接使用"somethings..." 这种方式 在Python非脚本使用中是无法输出的。要记得。

print('dfd%s' % 'ss')

dfdss

要使用print()进行输出

常见的占位符有:

%d整数
%f浮点数
%s字符串
%x十六进制整数

一般情况下直接使用%s就OK了,统统转换成字符,其实并没有什么问题。

看这个

'hus %s %%' % 'dff'

输出

'hus dff %'

这个就表明了:如果想让输出%只要使用%%这种方式,那么使用\%可以吗?我们试试


'hus %s \%' % 'sd'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: incomplete format

错误类型是格式不完整,所以说,这种方法不可以。

r = (85 - 72) / 72

>>> print("sdfds: %.2f" % r)
sdfds: 0.18

那么如果我们直接将r写入这个print中可以吗?

我们试试

print("sdfdsf:%.2f"  % (85 - 72) / 72)

提示错误


TypeError: unsupported operand type(s) for /: 'str' and 'int'

结果识别类型错误

我们看看js中如果要嵌入一个东西该怎么使用

console.log(`sdsssdds ${(12-1)/123} dedsdsd`)
sdsssdds 0.08943089430894309 dedsdsd

没错使用${}即可 如果是jade使用#{}即可。就可以进行替换符了。