內(nèi)容編碼
字符編碼的發(fā)展
ascii (只能識(shí)別英文)
8位 = 01010101 2**8(2的8次方)= 256 種組合就可以表示所有的英文司忱,字符痴突,數(shù)字
也就是1個(gè)字節(jié)就能表示所有的英文,字符,數(shù)字
但是不能表示其他國(guó)家語(yǔ)言如中文
萬(wàn)國(guó)碼 unicode (包含任何國(guó)家語(yǔ)言)
最少用2個(gè)字節(jié)來(lái)表示:
1個(gè)字節(jié) = 8位 = 01010101
2個(gè)字節(jié) = 16位 = 0101010101010101 2個(gè)字節(jié)就是 2**16(2的16次方)= 65536 種組合
也就是說(shuō)萬(wàn)國(guó)碼最少也要用兩個(gè)字節(jié)來(lái)表示
中文是用3個(gè)字節(jié)來(lái)表示的
3個(gè)字節(jié) = 24位 = 010101010101010101010101 3個(gè)字節(jié)就是 2**24(2的24次方)= 16777216 種組合
utf-8
有了萬(wàn)國(guó)碼后人們又發(fā)現(xiàn),造成了運(yùn)算空間的浪費(fèi),明明可以用1個(gè)字節(jié)表示的也用了2個(gè)字節(jié)來(lái)表示棠众,后來(lái)就又發(fā)明了utf-8
utf-8 是在萬(wàn)國(guó)碼的基礎(chǔ)上進(jìn)行了加工
也就是utf-8會(huì)自動(dòng)根據(jù)地區(qū)語(yǔ)言來(lái)判斷用多少位識(shí)別
英文:8位
歐洲:16位
中文:24位
...
所以我們?cè)趯?xiě)Python文件是要是有中文漢字,就需要告訴解釋器用什么編碼
如:
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 print '你好 中國(guó)'
如果是Python3.5版本解釋器有决,就可以不加編碼闸拿,因?yàn)槟J(rèn)就是utf-8編碼
也就是說(shuō),解釋器默認(rèn)是utf-8就可以不加书幕,如果默認(rèn)不是utf-8就必須加才能識(shí)別中文
編碼和解碼
編碼和解碼流程圖
utf-8或者gbk等編碼都是羹奉,由萬(wàn)國(guó)碼編碼而來(lái)的這個(gè)過(guò)程叫做(編碼)震鹉,將utf-8在還原成萬(wàn)國(guó)碼這個(gè)過(guò)程叫做(解碼)
在python中可以將某一段字符進(jìn)行編碼或者解碼
decode() 函數(shù) 為解碼 函數(shù)值:為要解碼的編碼(原本編碼)
使用方法:要解碼的字符串變量.decode(要解碼的編碼)
如:jiem = zifu.decode("utf-8")
encode() 函數(shù) 為編碼 函數(shù)值:為要編的碼(編碼)
使用方法:要編碼的解碼變量.decode(要編的碼)
舉例:
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 zifu = "中文字符"
4 #解碼,需要指定原來(lái)的是什么編碼
5 jiem = zifu.decode("utf-8")
6 #編碼,需要指定要使用什么編碼
7 bianm = jiem.encode("gbk")
8 print(bianm)
注意:如果是python3.5或者以上版本庆寺,可以省略解碼的環(huán)境道逗,直接第二步重新編碼就可以拇舀,也就是可以直接將utf-8直接編碼成gbk变抽,(解碼的過(guò)程解釋器會(huì)自動(dòng)完成)