编码
- 在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
- 用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件
- 浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器
- 1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节12345678910>>> ord('A')65>>> ord('中')20013>>> chr(66)'B'>>> chr(25991)'文'>>> '\u4e2d\u6587''中文'
str和bytes
|
|
y是str
,x是bytes
,内容显示一样,但bytes
每个字符都只占用一个字节
- Python的字符串类型是
str
,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str
变为以字节为单位的bytes
(各个平台的编码不一定都相同,socket 传递的数据都是bytes
类型的,避免乱码) - Python 3 不会以任意隐式的方式混用
str
和bytes
- Bytes 对象是由单个字节作为基本元素(8 位,取值范围 0-255)组成的序列,为不可变对象。
Bytes
对象只负责以二进制字节序列的形式记录所需记录的对象,至于该对象到底表示什么(比如到底是什么字符)则由相应的编码格式解码所决定。我们可以通过调用bytes()
类(没错,它是类,不是函数)生成bytes
实例,其值形式为b'xxxxx'
,其中'xxxxx'
为一至多个转义的十六进制字符串(单个 x 的形式为:\xHH
,其中\x
为小写的十六进制转义字符,HH 为二位十六进制数)组成的序列,每个十六进制数代表一个字节(八位二进制数,取值范围 0-255),对于同一个字符串如果采用不同的编码方式生成bytes
对象,就会形成不同的值
str
编码为指定的bytes
纯英文的str
可以用ASCII编码为bytes
,内容是一样的,含有中文的str
可以用UTF-8
编码为bytes
。含有中文的str
无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。
在bytes
中,无法显示为ASCII字符的字节,用\x##
显示。
bytes
编码为str
len函数
|
|
文件编码
|
|
第一行会告诉系统使用的python路径,不建议使用#!/usr/bin/python
,灵活性降低
|
|
格式化
|
|
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
如果不太确定应该用什么,%s永远起作用
format()
|
|
参考: