常用编码格式以及存储大小单位换算,进制转换

心得:马云所说:"工作是水,生活是酒。水会决定酒的质量,但生活,要过得像酒一样,不可以像水一样,沒有味道。"但我更在意酒的质量.

编码格式
我们都知道计算的编码类型是0和1,但具体怎么运行的我们也看不到,我们生活中常常接触到的是各式各样的字符,那我们这些字符和对应的0和1是怎么转换的,其实每一种字符都可以用二进制数表示,例如小写英文字母,数字等等,都属于ASCII码,但ASCII码是用一个字节七位表示的,也就是说,它最大表示的个数为2^7也就是128种字符。但每种语言都是不同的字符,这得需要同一的编码格式大家才能有效的和计算机交流。看看常用的编码都有那些吧。

ASCII码
它是用一个字节中的七位表示,共有128个,包括各种字符。也是常用的一种,但依然不够用。

ISO-8859-1
产生了ISO-8859-1格式,它是用一个字节八位表示,有2^8也就是256种,相当于ASCII码的扩展码,涵盖了大多数西欧语言字符,计算机内部常用。

GB2313/GBK
国标汉字的表示扩展规范,GBK是采用单双字节变长编码,英文使用单字节编码,完全兼容ASCII字符编码,中文部分采用双字节编码。

Unicode
统一码,万国码,两个字节表示一个字符。缺陷占用空间。
Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。目前的Unicode字符分为17组编排,0x0000 至 0x10FFFF,每组称为平面(Plane),而每平面拥有65536个码位,共1114112个。

UFT-8编码
UTF-8是以字节单位对Unicode编码,第0-127位字符使用1个字节来表示(单个字母、数字符号等)和ASCII编码相同,其中大部分汉字采用三个字节编码。从128号之后开始根据字符选择要使用的字节位数。因此UTF-8被称为可变长编码。

UTF-16

UTF-16编码以16位无符号整数为单位,使用二或四个字节为每个字符编码,其中大部分汉字采用两个字节编码。与UTF-8相比虽然表示的方法简单方便,有很大一部分字符用一个字节就可以表示的现在要用两个字节表示,有占有的存储空间放大一倍,会增大网络传输的流量,而且没必要这么做。
在这里插入图片描述

编码转换:

1. 将字符串通过编码转换为字节码:
str—> encode —>bytes
2. 将字节码通过解码转换为字符串
bytes —>decode —>str

在python中得编码本身为unicode编码,所以我们在对字符进行编码转换时,步骤为:

  1. A=str.encode(‘gbk’)
  2. B=A.decode(‘gbk’)

3. 还有一种方式编码解码
编码:

bytes(str,encoding='utf-8')

解码:

str(byte,encoding='utf-8')

网页中经常会有一些uxxxx字符,我们需要解码进行处理:

[(u'\u7528\u4f8b\u540d\u79f0', u'\u8fd4\u4f63\u7533\u8bf7'), (u'\u8bf7\u6c42\u65b9\u5f0f', u'POST'),]

原因  
后来定位到是因为unicode数据在传递过程中使用的内存编码值进行存储,没有使用文本形式存储,而邮件发送前后又没有进行解码
解决方法
具体使用的是Python为我们提供了解码和编码的方法decode()和encode(),
其中 decode(‘unicode_escape’) 能将此种字符串解码为unicode字符串,使用方法如下:

>>> print '\u7528\u4f8b\u540d\u79f0'
\u7528\u4f8b\u540d\u79f0
>>> print '\u7528\u4f8b\u540d\u79f0'.decode('unicode-escape')
用例名称

#text.encode("utf-8").decode('unicode-escape')
#对从浏览器上抓取的中文字符,转换时,需要先encode再进行decode

encode(encoding=“utf-8”) 将unicode码定义为utf-8格式的编码
decode(encoding=“utf-8”) 将utf-8格式的编码定义为unicode编码

从英文意思上看,encode和decode分别指编码和解码。在python中,Unicode类型是作为编码的基础类型,即:

      decode                 encode
str ---------> str(Unicode) ---------> str12

>>> u = '中文'                 # 指定字符串类型对象u 

>>> str1 = u.encode('gb2312')  # 以gb2312编码对u进行编码,获得bytes类型对象
>>> print(str1)
b'\xd6\xd0\xce\xc4'

>>> str2 = u.encode('gbk')     # 以gbk编码对u进行编码,获得bytes类型对象
>>> print(str2)
b'\xd6\xd0\xce\xc4'
>>> str3 = u.encode('utf-8')   # 以utf-8编码对u进行编码,获得bytes类型对象
>>> print(str3)
b'\xe4\xb8\xad\xe6\x96\x87'

>>> u1 = str1.decode('gb2312') # 以gb2312编码对字符串str进行解码,获得字符串类型对象
>>> print('u1')
'中文'

>>> u2 = str1.decode('utf-8')  # 报错,因为str1是gb2312编码的
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte

原文:https://blog.csdn.net/m0_38080253/article/details/78841280

再看一下字节/位的换算单位。

字节,比特的单位
b bit 位/比特
B Byte 字节
1 Byte = 8 bit
我们平时的大小,一定要看清楚单位是B字节还是b比特,两者相差8倍
1M=1024k
1G=1024M
1T=1024G

进制转换

十进制 -----> 其他进制
hex(num) —> 十六进制
oct(num) —> 八进制
bin(num) —> 二进制

字符串 —> 十进制整数
int(‘10’) 十进制字符串----->十进制整数
int(‘10’,16) 十六进制字符串------>十进制整数
int(‘0x10’,16)
int(‘10’,8)
int(‘10’,2)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值