Python中文乱码问题解决

前言

  趁着周末,赶紧学习充电,开始入门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
    3
    import urllib.request  
    response=urllib.request.urlopen('http://www.baidu.com')
    print(response.read().decode('utf-8'))
  • 当然:同样有人和我一样有相似的问题,也将问题解决了,具体原因请查看==>这里

  • 解决办法:
    1
    2
    3
    import io 
    import sys
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #改变标准输出的默认编码

小结

  终于,把中文编码问题都解决,感慨下写个小程序真不容易,连碰到几个坑,时间就这样过去。当然,这些问题我也都记录下来,希望能帮到其他人,不用在这些坑停留那么久。

评论