codecs是encoders和decoders的缩写。
codecs模块为我们解决的字符编码的处理提供了lookup方法,它接受一个字符编码名称的参数,并返回指定字符编码对应的codecs.CodecInfo 对象,该对象包含了 encoder、decoder、StreamReader和StreamWriter的函数对象和类对象的引用。为了简化对lookup方法的调用, codecs还提供了getencoder(encoding)、getdecoder(encoding)、getreader(encoding)和 getwriter(encoding)方法;进一步,简化对特定字符编码的StreamReader、StreamWriter和 StreamReaderWriter的访问,codecs更直接地提供了open方法,通过encoding参数传递字符编码名称,即可获得对 encoder和decoder的双向服务。
这个模块的强大之处在于它提供了流的方式来处理字符串编码,当处理的数据很多时,这种方式很有用。
你可以使用IncrementalEncoder和IncrementalDecoder,但是强烈建议使用StreamReader和StreamWriter,因为使用它们会大大简化你的代码。
例如,有一个test.txt的文件,它的编码为gbk,现在我需要将它的编码转换为utf8,可以编写如下代码:
最近在用python3比较强大的Django开发web的时候,发现一些url的编码问题,在浏览器提交请求api时,如果url中包含汉子,就会被自动编码掉。呈现的结果是 ==> %xx%xx%xx。如果出现3个百分号为一个原字符则为utf8编码,如果2个百分号则为gb2312编码。下面为大家演示编码和解码的代码。
编码
from urllib.parse import quote
text = quote(text, 'utf-8')
解码
from urllib.parse import unquote
text = unquote(text, 'utf-8')
python3的自动网址拼接----urljoin
from urllib.parse import urljoin
new_url = "/item/百度百科:本人词条编辑服务/22442459?bk_fr=pcFooter"
page_url = "https://baike.baidu.com/item/企业家/1243741"
new_full_url = urljoin(page_url, new_url)
--> new_full_url ---> https://baike.baidu.com/item/百度百科:本人词条编辑服务/22442459?bk_fr=pcFooter
python3 中 BeautifulSoup soup实例化吧报错
soup = BeautifulSoup(html_cont, 'html.parser', from_encoding='utf-8')
运行报错:You provided Unicode markup but also provided a value for from_encoding. Your from_encoding will be ignored.
原因:python3 缺省的编码是unicode, 再在from_encoding设置为utf8, 会被忽视掉,去掉from_encoding="utf-8"这一个好了。
正确写法:soup = BeautifulSoup(unquote(html_cont, 'utf-8'), 'html.parser')