一、编码的历史
第一种,ASCII码,最初只有127个字符被编码到计算机里,包含数字,字母,一些字符,占一个字节
第二种,GB2312码,把中文编进去,占两个字节。别的国家还有其他编码。
你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS
里,韩国把韩文编到Euc-kr
里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。
第三种,Unicode编码,把所有的语言都统一编码,一般两个字节表示一个字符,特别复杂的字符采用到4个字节
一个字母,ASCII编码一个字节,Unicode编码2个字节,这样占用存储空间
第四种,Utf-8编码,可变长的,通常一个字母编码一个字节,一个中文3个字节,只有很生僻的字符才4-6字节。其实ASCII编码是Utf-8的一部分
所以在计算机内存中统一使用Unicode编码,需要保存到硬盘或者需要传输的时候,就转换为Utf-8编码
二、python的字符串
在py3中使用unicode编码
1、单个字符的编码
ord('A') //65
ord('中') //20013
chr(66) //'B'
chr(25991) //'文'
'\u4e2d\u6587' //‘中文’
2、py字符串保存在unicode表示,一个字符对应若干个字符,如果要在网络上传输,欧洲保存在磁盘上,就需要把str变成字节为单位的bytes
bytes类型的数据将用b前缀表示,无法表示为ASCII字符的字节,使用\x##表示
unicode---bytes
‘ABC’.encode('ascii') //b‘ABC'
'中文'.encode('utf-8') //b'\xe4\xb8\xad\x96\x87'
但是中文字符不能ascii编码方式,转换成bytes
3、len()计算字符个数
4、文件编码方式
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
5、格式化,使用%实现 ,%%表示输出%
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
‘age:%d’ %23 //age:23