- 字符编码
英文字母、数字、字符 → 十进制 → 二进制
英文字母、数字、字符 → ASCII码 → 01010101(每八位代表一个字符)每一位0或1所占的空间为比特(bit),这是计算机最小的表示单位。ASCII码只能表示 255 个符号
8bit = 1bytes(字节),这是计算机最小的存储单位,缩写表示为1B。1KB = 1024B,1MB = 1024KB ...
中文 → 十进制 → 二进制
中文 → GB2312 → 01010101 仅能存储7000+个图形字符,其中汉字有6700+个
中文 → GBK1.0 、GBK18030 → 01010101 兼容GB2312
中文、英文字母、数字、字符 → Unicode → 0101010101010101(规定最少用16位表示,即2个字节)
中文、英文字母、数字、字符 → UTF-8(兼容Unicode) → 01010101...(长度可变,ascii码中的内容用1个字节表示、欧洲字符用2个字节表示、东亚用3个字节表示)
Windows 默认编码是GBK,Mac OS/Linux 默认编码是UTF-8
Python2.x默认编码为ASCII码,Python3默认编码是UTF-8
文件开头声明解释器和编码
#!/usr/bin/env python # -*- coding: utf-8 -*-
Unicod起到了两个作用:1.直接支持全球所有语言;2.unicode包含了跟全球所有国家编码的映射关系。
但是使用unicode表示一个字符,太浪费空间,为了解决存储和网络传输的问题,就出现了UTF。
UTF-8: 使用1、2、3、4个字节表示所有字符;优先使用1个字符、无法满足则使增加一个字节,最多4个字节。英文占1个字节、欧洲语系占2个、东亚占3个,其它及特殊字符占4个
UTF-16: 使用2、4个字节表示所有字符;优先使用2个字节,否则使用4个字节表示。
UTF-32: 使用4个字节表示所有字符;
即UTF 是为unicode编码 设计 的一种 在存储 和传输时节省空间的编码方案
python 2.x中
#-*-coding:utf-8-*- __author__ = 'Alex Li' import sys print(sys.getdefaultencoding()) msg = "我爱北京天安门" msg_gb2312 = msg.decode("utf-8").encode("gb2312") gb2312_to_gbk = msg_gb2312.decode("gbk").encode("gbk") print(msg) print(msg_gb2312) print(gb2312_to_gbk)
在python3.x中
#-*-coding:gb2312 -*- #这个也可以去掉 __author__ = 'Alex Li' import sys print(sys.getdefaultencoding()) msg = "我爱北京天安门" #msg_gb2312 = msg.decode("utf-8").encode("gb2312") msg_gb2312 = msg.encode("gb2312") #默认就是unicode,不用再decode,喜大普奔 gb2312_to_unicode = msg_gb2312.decode("gb2312") gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8") print(msg) print(msg_gb2312) print(gb2312_to_unicode) print(gb2312_to_utf8)
#-*-coding:gbk-*- #文件以GBK编码 import sys print(sys.getdefaultencoding()) s='你好'#还是默认utf-8 print(s) print(s.encode('gbk')) print(s.encode('utf-8').decode('utf-8').encode('gb2312')) print(s.encode('utf-8').decode('utf-8').encode('gb2312').decode('gb2312'))
>>>
utf-8
你好
b'\xc4\xe3\xba\xc3'
b'\xc4\xe3\xba\xc3'
你好
- 进制
二进制:01010101
八进制:012345678(以0o开头)
十进制:0123456789
十六进制(前缀0x、后缀H):0123456789ABCDEF(以0x开头)
十进制转八进制: oct(a) ,十进制转十六进制: hex(a)