1、字节
- 1字节(byte)=8比特(bit);
- 一个字节能表示的最大数字是2^8-1=255;
- 一个英文字母是一个字符;
- 一个汉字是一个字符;
2、编码
ASCII
编码,占1个字节,美国使用,只有127个字符,包括大小写英文字母、数字和符号,例如大写字母A
编码为65
,小写字母z
编码为122
;- 中国的中文编码为
GB2312
,一个汉字占用2
个字节; - 日本的日文编码为
Shift_JIS
; - 韩国的韩文编码为
Euc-kr
;
在多语言混合的文本中,会显示乱码
Unicode
编码把所有语言都统一到一套编码里,一般有2
个字节;UTF-8
编码,可变长编码,把一个Unicode
字符根据不同的数字大小编码成1-6
个字节,节省空间,英文字母占用1
个字节,常用汉字占用3
个字节,生僻的字符占用4-6
个字节;
ASCII
可以看做UTF-8
的一部分
3、现在计算机系统通用的字符编码工作方式:
-
在内存中以
Unicode
形式存在,在硬盘中以UTF-8
形式存在; -
在python中用
ord()
函数和chr()
函数转换字符和编码;
例如(python3
):
import sys
print(ord('A'))
print(chr(65))
显示如下:
65
A
print('\u4e2d\u6587') # '\u'指的是十六进制的Unicode编码,可以直接和单个字符转换
显示如下:
中文
- 字符串类型是
str
,在网络上传输或者保存到磁盘上就需要变为以字节为单位的bytes
(字节流)
encode
用来把字符串转换为bytes
形式
print('ABC'.encode('ascii'))
print( '中文'.encode('utf-8'))
显示如下:
b’ABC’
b’\xe4\xb8\xad\xe6\x96\x87’
\x
指的是UTF-8
编码
decode
用来把bytes
形式转换为字符串
print(b'ABC'.decode('ascii'))
print(b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8'))
显示如下:
ABC
中文
如果bytes
中包含无法解码的字节,decode()
方法会报错
如果bytes
中只有一小部分无效的字节,可以传入errors='ignore'
忽略错误的字节:
print(b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore'))
显示如下:
中
当Python解释器读取源代码时,为了让它按UTF-8
编码读取,通常在文件开头写上以下两行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
4、格式化字符串
print( 'Hi, %s, you have $%d.' % ('Michael', 1000000)) #如果只有一个变量,括号可以去掉
显示如下:
Hi, Michael, you have $1000000.
- %s用字符串替换
- %d用整数替换
- %f用浮点数替换
- %x用十六进制整数替换
print('%2d-%013d' % (3, 10))
显示如下:
3-0000000000010
%013d
表示把整数变成13位数,不够13位的在前面用数字0
补齐
%2d
表示把整数变成2位数,不够两位的在前面用空格
补齐
print('%.3f' % 3.1415926)
print('%.3f' % 3.1)
显示如下:
3.142
3.100
%.3f
表示把浮点数在小数点后保留3位,小数点后不够3位的用数字0
补齐
如果%
是字符串中的普通字符,用%%
表示%
例如:
print('考试通过率: %d%%' % 80)
显示如下:
考试通过率: 80%