博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[python基础]关于中文编码和解码那点事儿
阅读量:7126 次
发布时间:2019-06-28

本文共 1553 字,大约阅读时间需要 5 分钟。

  我们在用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-8import requestsdef 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-8s = '中文'print type(s)

输出:

 

在看看decode之后的处理方式

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

输出:

 

这样实验我们可以很直观的感受到,当我们要输出一个中文的时候:我们输出的是一个经过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出来,或者先解码,在按你需要的方式编码.

 

 

参考文章:

 

转载于:https://www.cnblogs.com/codefish/p/5016312.html

你可能感兴趣的文章
Kafka的安装测试
查看>>
Bash shell 程式的结构
查看>>
PostgreSQL 数据库NULL值的默认排序行为与查询、索引定义规范 - nulls first\last, asc\desc...
查看>>
苏宁 IT 总部消费者研发中心许宏平:如何用“黑科技”做“懂你”的门店?
查看>>
SharePoint 使用脚本为表单绑定事件
查看>>
好好的家电公司戴森,怎么说造车就造车了?
查看>>
物联网如何保持 Ben&Jerry 店冰淇淋不融化
查看>>
SQL Agent服务无法启动如何破
查看>>
为什么System.Attribute的GetHashCode方法需要如此设计?
查看>>
如何回答这三个问题 反映着事件响应小组的准备程度
查看>>
网上挂号众口难调 医院信息系统待整合
查看>>
SpringMVC + Apache POI 实现WEB中Excel下载功能
查看>>
智能锁市场释放洪荒之力 但火热背后仍存隐忧
查看>>
Windows 8上强制Visual Studio以管理员身份运行
查看>>
Linux_Bash常用脚本
查看>>
Python Module_subprocess_调用 Powershell
查看>>
HTML5中 HTML表单和PHP环境搭建及与PHP交互 韩俊强的博客
查看>>
安全老炮儿看局势——赛门铁克发布第21期《互联网安全威胁报告》
查看>>
Fortinet 携手中信国际电讯CPC在亚太地区扩展安全托管服务
查看>>
OpenStack发布最新版本Ocata 为开源云带来更高稳定性
查看>>