python基础系列教程——Python中的编码问题,中文乱码问题
2017-09-03 11:30
761 查看
全栈工程师开发手册 (作者:陈玓玏)
python教程全解
如果不声明编码,则中文会报错,即使是注释也会报错。只要写中文,必须加一句:# -- coding:utf-8 --。原因:答案在PEP-0263里面有所提及,那就是Emacs等编辑器使用这种方式进行编码声明。
文档编码是一种告诉程序——无论是计算机的操作系统还是Python 代码——读取文档的规则。正确读取一个文档,往往需要先知道文件的扩展名,因为编码方式往往与扩展名有很大的关系。
(1)纯文本文档的获取与处理:直接用urlopen读取后,用read()函数获取文本内容即可。纯文本页面不要转换成BeautifulSoup对象,因为无法解析,会被认为是一堆字符串,只能用字符串的操作方法来解析。
(2)CSV文档、PDF文档等非纯文本文档的读取方式:直接通过文档获取链接以字符串的方式读取文档——通过io库的StringIO函数将字符串转换为StringIO对象——通过CSV库或PDF库将StringIO对象读取为相应格式的文档,
编码类型:
在用Python读网页或文档时,最好统一将获取的内容统一转换成UTF-8编码。获取国际站的内容时,最好先看看网站metasharset信息中所指示的编码方式后再确定选择哪种编码方式。
Encode和Decode:
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘gb2312’),表示将unicode编码的字符串str2转换成gb2312编码。
因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码
python教程全解
如果不声明编码,则中文会报错,即使是注释也会报错。只要写中文,必须加一句:# -- coding:utf-8 --。原因:答案在PEP-0263里面有所提及,那就是Emacs等编辑器使用这种方式进行编码声明。
文档编码是一种告诉程序——无论是计算机的操作系统还是Python 代码——读取文档的规则。正确读取一个文档,往往需要先知道文件的扩展名,因为编码方式往往与扩展名有很大的关系。
(1)纯文本文档的获取与处理:直接用urlopen读取后,用read()函数获取文本内容即可。纯文本页面不要转换成BeautifulSoup对象,因为无法解析,会被认为是一堆字符串,只能用字符串的操作方法来解析。
(2)CSV文档、PDF文档等非纯文本文档的读取方式:直接通过文档获取链接以字符串的方式读取文档——通过io库的StringIO函数将字符串转换为StringIO对象——通过CSV库或PDF库将StringIO对象读取为相应格式的文档,
编码类型:
(1)UTF-8:统一字符集-转换格式8位。它的开头有标记指示字符占了用了多少个字节来表示,一个字符最多有四个字节。 (2)ASCII:每个字符7位,用来表示中文会不够用,但是英文够用了。 (3)UtF-8和ASCII的结合:首位为0,即只包含一个字节的UTF-8字符和ASCII通用,因为相当于只用到了7位。但首位为1的两字节UTF-8字符不通用。 (4)ISO编码:解决非英文非中文语言文档太大的问题,比如土耳其语没有那么多字符,又不能用单纯的ASCII。因此使用ASCII的首位来做特殊化,可以针对不同的语言生成不同的规则。
在用Python读网页或文档时,最好统一将获取的内容统一转换成UTF-8编码。获取国际站的内容时,最好先看看网站metasharset信息中所指示的编码方式后再确定选择哪种编码方式。
Encode和Decode:
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘gb2312’),表示将unicode编码的字符串str2转换成gb2312编码。
因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码
相关文章推荐
- python使用requests爬取网页,遇到中文出现乱码的编码问题及解决
- python编码与mysql中文乱码问题的解决
- 快乐Python快速上手系列10 - 中文编码问题
- python中文乱码的编码问题深入(推…
- python中文编码问题深入分析(二):print打印中文异常及显示乱码问题分析与解决
- Python 2.7.3的文件编码问题,print在控制台下面中文乱码问题,以及推荐做法
- python在WIN下CMD运行中文乱码及python 2.x python 3.x编码问题
- Python基础教程(一):简介、环境搭建、中文编码
- 计算机编码基础----中文乱码问题分析
- python使用requests爬取网页,遇到中文出现遇到中文出现乱码的编码问题及解决乱码的编码问题及解决
- python中文编码乱码问题
- Python 编码问题:出现中文乱码-- (转)
- python爬虫获取编码时中文乱码问题
- python获取html编码GB2312中文乱码的问题
- python绘图基础—解决图例中文乱码和负数坐标问题问题
- Python | 多种编码文件(中文)乱码问题解决 chardet模块
- Java语言基础系列之2--用IDEA中文编码问题
- [原创]python中文编码老是出错问题。
- python乱码,python编码,python中文编码转换,python utf-8,python utf8,python unicode
- jsp,java中文乱码问题另类解决方案,jni加密、解密编码