python编码全解析
2017-01-06 18:44
525 查看
代码改变世界
Posts - 264, Articles - 1, Comments - 2346
Cnblogs
Dashboard
Login
HOME
CONTACT
GALLERY
RSS
查看python系统编码:
sys.getdefaultencoding()
更改python系统编码:
reload(sys)
sys.setdefaultencoding()
查看操作系统(windows)输出控制台(cmd)编码(一般为macs 也即 ansi):
sys.getfileencoding
查看外部文件编码(网页,记事本文本)
chardet.detect()
2015-12-01 00:02 by 虫师, 7669 阅读, 1 评论, 收藏, 编辑
认识常见编码
GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码
GBK 是 GB2312的扩展 ,除了兼容GB2312外,它还能显示繁体中文
,还有日文的假名
cp936:中文本地系统是Windows中的cmd,默认codepage是CP936,cp936就是指系统里第936号编码格式,即GB2312的编码。
(当然有其它编码格式:cp950 繁体中文、cp932 日语、cp1250 中欧语言。。。)
Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
UTF-8 (8-bit Unicode Transformation Format)是最流行的一种对 Unicode 进行传播和存储的编码方式。它用不同的 bytes 来表示每一个代码点。ASCII 字符每个只需要用一个 byte ,与 ASCII 的编码是一样的。所以说 ASCII 是 UTF-8 的一个子集。
在开发Python程序的过程中,会涉及到三个方面的编码:
Python程序文件的编码
Python程序运行时环境(IDE)的编码
Python程序读取外部文件、网页的编码
Python程序文件的编码
例如:
Python2自带的IDE,当创建了一个文件保存的时候提示:
这是因为Python2编辑器默认的编码是ASCII,它是无法识别中文的,所以会弹出这样的提示。这也是我们在大多情况下写python2程序的时候习惯在程序的第一行加上:#coding=utf-8
其实,这里的编码文件是很容易解决的。
Python程序运行时环境(IDE)的编码
执行下面的一段程序。
在windows cmd下执行:
我们要获取的信息是:
©2015 Baidu 使用百度前必读 意见反馈 京ICP证030173号
Windows cmd 用的是cp936,也就是中文的GB2312,在GBK的字符集里没有“©”,这就导致通过GBK解析的时候出现编码问题。
这就像你在翻译英文的时候,出现了一个单词,这个单词你查遍了牛津大词典都没找到对应的含义解释,那么自然是会有问题的。
那假设,我还就想在cmd下执行这个python程序了,那么可以去修改cmd的默认编码类型为utf-8,对应的编码为CHCP 65001(utf-8)。在cmd 下输入:chcp 65001 命令回车。
然后,修改cmd的字体为“Lucida Console”,再来执行程序就可以被正确输出了。
Python程序读取外部文件、网页的编码
#这一块,暂时没有找到合适的例子
查看Python系统编码
查看Python2 或Python3的系统编码。
Python2:
Python3:
那么如何修改Python2的系统编码为urf-8呢?
所以,在你的程序执行的过程中,遇到下面的报错信息时。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1....
可以将上面的三行代码加到Python程序的头部。
查看操作系统(windows)控制台编码
sys.getfileencoding()
decode()与encode()
decode 的作用是将其他编码的字符串转换成 Unicode 编码,eg name.decode(“GB2312”),表示将GB2312编码的字符串name转换成Unicode编码。
encode 的作用是将Unicode编码转换成其他编码的字符串,eg name.encode(”GB2312“),表示将GB2312编码的字符串name转换成GB2312编码。
例如,前面获取百度底部信息的例子。我还可以通过decode()与encode()来解决:
这里通过encode()将Unicode编码转换成gbk编码,在转换的过程中通过“ignore”忽略掉gbk不能识别的字符(©),然后再把gbk转换成Unicode编码。当然,这并不是一种完美的方式,毕竟牺牲部分字符串。
chardet模块
chardet是一个非常优秀的编码识别模块。
通过pip 安装:
>pip install chardet
使用:
大概有68%的把握为KOI8-R编码类型。
好文要顶 关注我 收藏该文
虫师
关注 - 31
粉丝 - 5005
+加关注
3
0
« 上一篇:Robot
Framework自动化测试(六)--- robotremoteserver使用
» 下一篇:再次用CodeIgniter实现简易blog
分类: python
ADD YOUR COMMENT
#1楼 carol2000 2016-01-12
00:02
支持(1)反对(0)
刷新评论刷新页面返回顶部
注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。
最新IT新闻:
· 亚马逊APP酝酿变革:吸引电商竞争对手进驻 增加提成营收
· 《环球科学》发布2016年十大科技热词 雾霾连续3年入选
· 苹果难得在中国搞了个大促销,却因太小气没诚意被网友吐槽
· 微软将与PC厂商合作 大批基于HoloLens技术的AR头盔即将面世
· 华为终端CEO余承东:2017年要控制规模 提升利润
» 更多新闻...
最新知识库文章:
· 写给未来的程序媛
· 高质量的工程代码为什么难写
· 循序渐进地代码重构
· 技术的正宗与野路子
· 陈皓:什么是工程师文化?
» 更多知识库文章...
Computer Desks
Posts - 264, Articles - 1, Comments - 2346
Cnblogs
Dashboard
Login
HOME
CONTACT
GALLERY
RSS
虫师大人不华,君子务实。
独立博客:HTTP://WWW.TESTPUB.CN
Python编码问题整理
查看python系统编码:sys.getdefaultencoding()
更改python系统编码:
reload(sys)
sys.setdefaultencoding()
查看操作系统(windows)输出控制台(cmd)编码(一般为macs 也即 ansi):
sys.getfileencoding
查看外部文件编码(网页,记事本文本)
chardet.detect()
2015-12-01 00:02 by 虫师, 7669 阅读, 1 评论, 收藏, 编辑
认识常见编码
GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码
GBK 是 GB2312的扩展 ,除了兼容GB2312外,它还能显示繁体中文
,还有日文的假名
cp936:中文本地系统是Windows中的cmd,默认codepage是CP936,cp936就是指系统里第936号编码格式,即GB2312的编码。
(当然有其它编码格式:cp950 繁体中文、cp932 日语、cp1250 中欧语言。。。)
Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
UTF-8 (8-bit Unicode Transformation Format)是最流行的一种对 Unicode 进行传播和存储的编码方式。它用不同的 bytes 来表示每一个代码点。ASCII 字符每个只需要用一个 byte ,与 ASCII 的编码是一样的。所以说 ASCII 是 UTF-8 的一个子集。
在开发Python程序的过程中,会涉及到三个方面的编码:
Python程序文件的编码
Python程序运行时环境(IDE)的编码
Python程序读取外部文件、网页的编码
Python程序文件的编码
例如:
Python2自带的IDE,当创建了一个文件保存的时候提示:
这是因为Python2编辑器默认的编码是ASCII,它是无法识别中文的,所以会弹出这样的提示。这也是我们在大多情况下写python2程序的时候习惯在程序的第一行加上:#coding=utf-8
其实,这里的编码文件是很容易解决的。
Python程序运行时环境(IDE)的编码
执行下面的一段程序。
#coding=utf-8 from selenium import webdriver driver = webdriver.Firefox() driver.get("http://www.baidu.com") # 返回百度页面底部备案信息 text = driver.find_element_by_id("cp").text print(text) driver.close()
在windows cmd下执行:
我们要获取的信息是:
©2015 Baidu 使用百度前必读 意见反馈 京ICP证030173号
Windows cmd 用的是cp936,也就是中文的GB2312,在GBK的字符集里没有“©”,这就导致通过GBK解析的时候出现编码问题。
这就像你在翻译英文的时候,出现了一个单词,这个单词你查遍了牛津大词典都没找到对应的含义解释,那么自然是会有问题的。
那假设,我还就想在cmd下执行这个python程序了,那么可以去修改cmd的默认编码类型为utf-8,对应的编码为CHCP 65001(utf-8)。在cmd 下输入:chcp 65001 命令回车。
然后,修改cmd的字体为“Lucida Console”,再来执行程序就可以被正确输出了。
Python程序读取外部文件、网页的编码
#这一块,暂时没有找到合适的例子
查看Python系统编码
查看Python2 或Python3的系统编码。
Python2:
Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32 Type "copyright", "credits" or "license()" for more information. >>> import sys >>> sys.getdefaultencoding() 'ascii'
Python3:
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32 Type "copyright", "credits" or "license()" for more information. >>> import sys >>> sys.getdefaultencoding() 'utf-8'
那么如何修改Python2的系统编码为urf-8呢?
import sys reload(sys) sys.setdefaultencoding('utf-8')
所以,在你的程序执行的过程中,遇到下面的报错信息时。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1....
可以将上面的三行代码加到Python程序的头部。
查看操作系统(windows)控制台编码
sys.getfileencoding()
decode()与encode()
decode 的作用是将其他编码的字符串转换成 Unicode 编码,eg name.decode(“GB2312”),表示将GB2312编码的字符串name转换成Unicode编码。
encode 的作用是将Unicode编码转换成其他编码的字符串,eg name.encode(”GB2312“),表示将GB2312编码的字符串name转换成GB2312编码。
例如,前面获取百度底部信息的例子。我还可以通过decode()与encode()来解决:
#coding=utf-8 from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.baidu.com") # 返回百度页面底部备案信息 text = driver.find_element_by_id("cp").text text2 = text.encode("gbk","ignore").decode("gbk") print(text2)
这里通过encode()将Unicode编码转换成gbk编码,在转换的过程中通过“ignore”忽略掉gbk不能识别的字符(©),然后再把gbk转换成Unicode编码。当然,这并不是一种完美的方式,毕竟牺牲部分字符串。
chardet模块
chardet是一个非常优秀的编码识别模块。
通过pip 安装:
>pip install chardet
使用:
>>> from chardet import detect >>> a = "中文" >>> detect(a) {'confidence': 0.682639754276994, 'encoding': 'KOI8-R'}
大概有68%的把握为KOI8-R编码类型。
好文要顶 关注我 收藏该文
虫师
关注 - 31
粉丝 - 5005
+加关注
3
0
« 上一篇:Robot
Framework自动化测试(六)--- robotremoteserver使用
» 下一篇:再次用CodeIgniter实现简易blog
分类: python
ADD YOUR COMMENT
00:02
|
刷新评论刷新页面返回顶部
注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。
最新IT新闻:
· 亚马逊APP酝酿变革:吸引电商竞争对手进驻 增加提成营收
· 《环球科学》发布2016年十大科技热词 雾霾连续3年入选
· 苹果难得在中国搞了个大促销,却因太小气没诚意被网友吐槽
· 微软将与PC厂商合作 大批基于HoloLens技术的AR头盔即将面世
· 华为终端CEO余承东:2017年要控制规模 提升利润
» 更多新闻...
最新知识库文章:
· 写给未来的程序媛
· 高质量的工程代码为什么难写
· 循序渐进地代码重构
· 技术的正宗与野路子
· 陈皓:什么是工程师文化?
» 更多知识库文章...
Computer Desks
相关文章推荐
- 计算机编码原理 以Python为例的解析
- 03-网页内容的编码检测 | 02.数据解析 | Python
- python2.7 编码问题解析(四) open与编码的关系
- python2.7 编码问题解析(三)
- Python解析xml文件遇到的编码解析的问题
- linux下python脚本文件的执行与编码解析
- python 解析unicode编码的字符串
- Python中JSON在解析的同时进行自定义编码处理
- Python解析“Unicode”编码格式文本
- Python解析xml文件遇到的编码解析的问题
- Python解析URL字符编码
- python解析plist文件gb2312编码格式到utf-8编码格式
- python2.7 编码问题解析(二)
- python爬虫解析网页编码问题
- Python中文编码深入解析
- [python爬虫]对html解析读取编码格式,统一转码为utf-8
- python解析gbk编码的xml
- Python中文编码深入解析