我们在用python处理中文的时候,或多或少会遇到这样一些错误

常见错误1:

SyntaxError: Non-ASCII character '\xe4' in file C

常见错误2:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

毫无疑问,我们在用python2.7.x的时候都会遇到这种问题,我们常规的解法又是怎么样的呢

# coding:utf-8
import requests def print_text():
url = 'http://www.cnblogs.com/'
print requests.get(url).text.encode('utf-8') print_text()

首先在文件py文件的头部加上标识coding:utf-8 ,然后使用encode('utf-8'),一般这样处理,文字都可以正常显示到我们的控制台了。那有没有想过我们为什么要这样做?如果你不仅是对写code感兴趣,更想了解其中的原因的话,那我们接着往下看

说起字符的编码与解码,那就不得不提字符集了

如图所示,我们所知的英文编码都是采用ansi编码,随着中国的崛起,国家也开始信息化,但是计算机不认识中国汉字,怎么办呢,我们制定自己统一的字符集,这就是GB2312,

后来更新的字符集,GBK,GB18030,BIG5 ,都是在原来的基础之上增加一些新的元素的识别,比如一些生僻字,繁体字认识。

这样一来不是中文一套,英文一套,那后来的一些其它的国家文字不就都不能互相通用了,那干脆一锅端,将这些英文,中文,各国的语言文字大一统,Unicode就出现了,不仅兼容了这些文字,与方便了各国的信息交流.

在Unicode编码方式下,又存在 utf-8,utf-16,utf-32的编码方式

通过上面的一些例子,我们可以大致对于编码和解码有一个大概的印象,那接下来我们看看python2.7.x对于编码是怎么处理的,还是先上一个图

basestring下面有两个对象,unicode,str 那这两者的关系是怎么样的?

  unicode   ==encode==>  str

str         ==decode==>   unicode

我们先看python的输出

# coding:utf-8
s = '中文'
print type(s)

输出:

<type 'str'>

在看看decode之后的处理方式

# coding:utf-8
s = '中文'.decode('utf-8')
print type(s)

输出:

<type 'unicode'>

这样实验我们可以很直观的感受到,当我们要输出一个中文的时候:我们输出的是一个经过unicode原始对象encode后的str,那当我们拿到一个返回对象,最常见的在爬虫里面得到返回字符串的时候我们怎么处理呢?

首先我们要在py文件头部声明处理编码,因为我们的py文件默认采用的是ascii编码,当返回的字符串写回到文档时就与文档编码相冲突,这里就会报销:

#coding:utf-8

一般我们加上coding:utf-8就够了,或者coding:gbk也可以

然后对于返回对象我们可以查看一下类型type(response.text)

如果是unicode ,那这response.text.encode('utf-8')就可以得到我们要的str对象,如果是str,我们可以直接print出来,或者先解码,在按你需要的方式编码.

参考文章:

中文编码杂谈

python进阶-编码处理小结

[python基础]关于中文编码和解码那点事儿的更多相关文章

  1. python基础之编码问题

    python基础之编码问题 本节内容 字符串编码问题由来 字符串编码解决方案 1.字符串编码问题由来 由于字符串编码是从ascii--->unicode--->utf-8(utf-16和u ...

  2. Python基础-字符编码与转码

    ***了解计算机的底层原理*** Python全栈开发之Python基础-字符编码与转码 需知: 1.在python2默认编码是ASCII, python3里默认是utf-8 2.unicode 分为 ...

  3. Python之路【第二篇】:Python基础

    参考链接:老师 BLOG : http://www.cnblogs.com/wupeiqi/articles/4906230.html 入门拾遗 一.作用域 只要变量在内存中就能被调用!但是(函数的栈 ...

  4. Python基础:序列(字符串)

    一.概述 字符串 类似于C中的字符数组(功能上更像C++中的string),它是由一个个 字符 组成的序列.与C/C++不同的是,Python中没有 字符 这个类型,而是用 长度为1的字符串 来表示字 ...

  5. Python基础学习笔记(五)常用字符串内建函数

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-strings.html 3. http://www.liaoxu ...

  6. Python基础学习笔记(一)入门

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-chinese-encoding.html 3. http://w ...

  7. Python基础(二) —— 字符串、列表、字典等常用操作

    一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 二.三元运算 result = 值1 if 条件 else 值2 如果条件为真:result = 值1如果条件为 ...

  8. 第三篇:python基础之编码问题

    python基础之编码问题   python基础之编码问题 本节内容 字符串编码问题由来 字符串编码解决方案 1.字符串编码问题由来 由于字符串编码是从ascii--->unicode---&g ...

  9. Day2 - Python基础2 列表、字典、集合

    Python之路,Day2 - Python基础2   本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一, ...

随机推荐

  1. 使用WatiN进行UI自动化测试

    Watin是一个UI自动化测试工具,支持ie/firefox,官方网站:http://watin.org/. 主要有以下特点: 支持主要的html元素,见:http://watin.org/docum ...

  2. Backbone源码解析(一):Event模块

    Backbone是一个当下比较流行的MVC框架.它主要分为以下几个模块: Events, View, Model, Collection, History, Router等几大模块.它强制依赖unde ...

  3. Hdoop日记Day10---RPC机制

    一.RPC(Remote Procedure Call)简介 RPC 是远程过程调用(Remote Procedure Call),即远程调用其他虚拟机中运行的javaobject.RPC 是一种客户 ...

  4. 【异常处理_iis】无法启动IIS Express\iisexpress.exe

    正调试着程序,突然不能调试了.重启了也没用,还是报错:无法启动程序 C:\Program Files(X86)\IIS Express\iisexpress.exe. 和之前无法启动IIS Expre ...

  5. 深入探究js中无所不在的this

    黄金守则: this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window而当函数被作为某个对象的方法调用时, this等于那个对象. 下面是一些相关实践: --------- ...

  6. swfupload 例子

    upload.html <!DOCTYPE html> <html lang="en"> <head> <script type='tex ...

  7. [php入门] 2、基础核心语法大纲

    1 前言 最近在学PHP,上节主要总结了PHP开发环境搭建<[php入门] 1.从安装开发环境环境到(庄B)做个炫酷的登陆应用>.本节主要总结PHP的核心基础语法,基本以粗轮廓写,可以算作 ...

  8. Memcache服务器端参数说明

    /usr/local/webserver/memcached/bin/memcached -d -m 512 -u root -l 192.168.0.1 -p 11211 -c 512 -P /us ...

  9. vs如何在C++中调用Lua

    最近Cocos2dx的学习卡壳了,一般的照抄代码我不想写上来,但想示例也想得我头晕...为了放松大脑调整状态于是开始学习Lua.Lua的语法学习还是比较简单的,学过javascript或者vbscri ...

  10. Atitit vod ver 12 new feature v12 pb2 影吧 视频 电影 点播 播放系统v12新特性

    Atitit vod ver 12 new feature v12 pb2 影吧 视频 电影 点播 播放系统v12新特性 项目分离从独立的se ver Run mode from brow ex to ...