2019.7.17:编码

前言:bit=比特=位=b byte=字节=B  1B=8b

 1、

ASCII编码

用1B进行编码,最多28=256个字符   'd'=100  D=d-32=68  以此可以推算其他字母对应的数字

 

Unicode编码

ASCII编码只能编入英文字母等符号,所以Unicode编码应运而生,常用的是2个字节表一个字符,生僻字符会用到4个字节

 

UTF-8编码

把定长的Unicode编码变为了可变长编码,从1B到6B,常用英文字母为1B(与ASCII编码对应),汉字通常为3B,如果传输的文件包含大量英文字符,就可以用UTF-8编码

另外 ASCII编码可以视为UTF-8编码的一部分

  ASCII Unicode  UTF-8
A 01000001 00000000 01000001 01000001
汉字“中” 01001110 00101101 11100100 10111000 10101101

 

计算机内存中统一使用Unicode编码,在硬件保存或者传输时采用UTF-8编码

用记事本编辑时,会将从文件中读取的UTF-8转化为Unicode存到内存中,编辑完成后保存时再把Unicode转化为UTF-8保存到文件中

 

 

而在访问网页时,服务器将Unicode内容转化为UTF-8再传输到浏览器,很多网页源码上会出现类似

<meta charset="UTF-8" />

表示网页采用UTF-8编码

 

2、Python 字符与编码

Python出现的比Unicode早,普通的英文字符串如'ADE'在Python中都以ASCII编码,可以用ord和chr完成ASCII字符与其对应数字的转化

ord('A')=65 chr(65)='A'

 

后来添加了对Unicode的支持,以Unicode表示的字符串有个前缀u

u'你好'和u'\u4f60\u597d'是相同的,\u表示16进制,用16进制表示的unicode编码4f60即为中文汉字'你',同理16进制Unicode'597d'是'好'

 

ASCII编码同样可以视为UTF-8编码,所以在进行编码转换时只需考虑Unicode和UTF-8间的转化即可,

 

u'XXX'转化为UTF的'XXX'的方法:encode('UTF-8'),反过来转化是decode('UTF-8'),UTF不区分大小写,英文字符转化候的Unicode与UTF-8值相同但占用内存不同(2B与1B)

如:

u'你'.encode(‘UTF-8’)

逆向转化:

 

字符串大小可以通过len函数获得:

 

 可以得到unicode与UTF-8的区别:1、所占字节大小不同 2、unicode表示的字符前要加u UTF-8不需要

 

3、保存Python文件

Python文件也是文本文件,所以当源码中包含中文时,需要指定用UTF-8编码保存,为了让Python解释器按照UTF-8编码读取,需要在文件开头加上两行

#!/usr/bin/env python 
#coding=utf-8

第一行是告诉Linux/OS 系统,这是一个python可执行程序,而Windows会自动忽略这一条

第二行告诉Python解释器按照utf-8编码读取源码,否则可能会出现中文乱码情况

 

Python2.X的unicode和UTF-8是以u前缀区分的

而Python3.X吧二者统一成了unicode编码,写不写前缀u都一样,但以字节形式表示的字符串必须交上前缀b即 b'XXX'

posted @ 2019-07-17 15:33  ShineLe  阅读(140)  评论(0)    收藏  举报