前言
趁着周末,赶紧学习充电,开始入门Python的学习,其实是想用Python来写写爬虫,爬些一些网页。当然对于Python,爬虫写起来确实不费劲,也很简洁。所以,周末抽点时间学习下Python的语法。在学习的过程中,有很多东西可以写总结,下面就Python对中文字符集编码处理的记录。
默认字符集
无论哪种语言都离不开对中文乱码问题的处理,所以Python也不例外。在最新的Python 3版本中,字符串是以Unicode(2个字节)编码的,对很多语言是支持的。对于编码的历史进程,可以在这里看看,可能看后还是懵逼的,但是简单总结就是使用utf-8编码来解决字符编码的历史遗留问题。
- 使用utf-8编码
1
2
3
4
5
6含有中文的源码文件指定保存为utf-8编码,并却在文件开头写上这两行,当Python解释器读取源代码时,会以utf-8编码读取
> \#!/usr/bin/env python3
> \# -*- coding: utf-8 -*-
> 第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释。
> 第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
SublimeText3 中文
SublimeText作为轻量级的文本编辑器,用来写写Python是最好不过的,可以很方便的编译测试(Ctrl+B)。但是,比如print(‘中文’),在Console却无法打印’中文’。为什么Python无法在控制台输出中文呢,其实是命令窗口默认编码(cp936)的问题,通过将源码输出到命令窗口,无法对中文字符正确解码。
- 正确Python.sublime-build配置
1
2
3
4
5
6{
"cmd": ["python","-u","$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python",
"encoding": "cp936"
}
UnicodeEncodeError
爬了百度的首页,返回的html/text想打印出来结果发生了一下错误:
1
UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 8530: illegal multibyte sequence
代码如下:
1
2
3import urllib.request
response=urllib.request.urlopen('http://www.baidu.com')
print(response.read().decode('utf-8'))当然:同样有人和我一样有相似的问题,也将问题解决了,具体原因请查看==>这里
- 解决办法:
1
2
3import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #改变标准输出的默认编码
小结
终于,把中文编码问题都解决,感慨下写个小程序真不容易,连碰到几个坑,时间就这样过去。当然,这些问题我也都记录下来,希望能帮到其他人,不用在这些坑停留那么久。