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%
本文介绍了字符编码的基础知识,包括字节、编码如ASCII、Unicode和UTF-8的区别,以及在计算机系统中的处理方式。强调了内存中以Unicode编码存在,硬盘上以UTF-8等形式存在,并展示了Python中如何进行编码与解码操作。最后讨论了格式化字符串的使用,如%s、%d、%f等占位符的应用。
1854

被折叠的 条评论
为什么被折叠?



