编码知识整理

编码相关:

-------------------------------------------------------------------------------------------------------------------------------------------------------------
编码发展史(纵向为发展线,横向为对应关系):
ASCII——ESCII(扩展)——美国
ISO-8859——欧美语言
GB2312——GBK(扩展)——GB18030(再次扩展)——中国
BIG5——台湾

......

其他语言

......
UNICODE——通用等长编码(双字节)
UTF——通用变长编码
(相对于ASCII来说,很多编码都是向下兼容的)


-------------
编码与解码:
>>编码/解码(计算机层面):将某一字符转换二进制数串;反之即为解码
>>编码/解码(python层面):其他编码类型的字符串到Unicode称为编码;反之为解码


------------
半角与全角:
>>在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的”全角”字符,而原来在127号以下的那些就叫”半角”字符了


---------------------
字符编码与字符集:
>>字符集:各种语言在计算机上的字符的全集(如中文对应了GBK,英文对应了ASCII,所有语言对应了UCS)
>>字符编码:每种字符集对应的编码规则,一般一个字符集对应一个字符编码(如GBK本身含有自身的编码),也有的字符集对应多种编码规则(如UCS对应了unicode,utf-8,utf-16等)


>>UTF与UNICODE与UCS:
UCS是统一字符集,UNICODE是UCS对应的编码(所有符号都用两个字节表示,包括英文),UTF是为网络传输而设计的编码(UTF-8就是每次传输8位数据,UTF-16同理)


>>变长编码(如utf-8):在UTF-8编码中原本只需要一个字节的ASCII字符,仍然只占一个字节。而像中文及日语这样的复杂字符就需要2个到3个字节来存储(中文在UTF中用三个字节)。


>>UTF-8如此通用为什么国内还是用GBK:
因为UTF比GBK大很多,占用空间太多;
国内面向人群基本全是中国人,故没必要使用UTF


-----------
编码种类:
>>ANSI、GBK、GB2312、UTF系列、GB18030和 UNICODE


>>在python中Unicode是基本编码类型


-------------------
解决编码乱码问题:
>>u+"字符串":指定该字符串类型为Unicode(PYTHON环境中)


>>encode和decode区别:前者为编码,后者为解码


>>Unicode是桥梁(共同认识的语言库),其他编码类型可以对Unicode对象编码,但解码的时候必须用对应的编码形式,将其解码为Unicode


>>如若要显示汉字不乱码,必须将现有对象先解码为Unicode对象,然后以可以识别汉字的,且当前环境支持的编码对其进行编码。
如:
u1 = u'string'//定义unicode类型字符串
str1 = u1.encode('gbk')//将Unicode对象编码为gbk
str2 = u1.encode('gb2312')
str3 = u1.encode('utf-8')
str_1 = str1.decode('gbk')//成功将gbk解码为Unicode
str_2 = str1.decode('utf-8')//不能将gbk解码为Unicode,只有gbk可以


>>python提供了一个编码函数codecs,相当以上过程:codecs.open('字符串',‘?’,encoding='编码格式')//?处为不知道填什么


>>方法:
安装chardet模块:python -m pip install chardet
导入chardet,sys:import chardet,import sys
将网页读取下来:response = opener.open(url).read()
获取系统的默认编码:typeEncode  = sys.getfilesystemencoding()
利用chardet模块自动提取网页编码:infoencode = chardet.detect(response ).get('encoding','utf-8')
将原编码下的网页转换成系统编码的网页:
html = content.decode(infoencode,'ignore').encode(typeEncode)
输出:print html


----------------------------------------------------------------------------------------------------------------------------------------------------------

参考链接

https://www.cnblogs.com/evening/archive/2012/04/19/2457440.html

https://www.jianshu.com/p/bd7a6c508c33

https://www.zhihu.com/question/23374078

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值