python和编码
2016-06-16 20:01
387 查看
对于编码问题,一直以来都是懵懵懂懂的,没有一个明确的概念.今天特意了解了下这方面的内容.并尝试将自己的理解写出来.表述不会很严谨,如有错误还请指正.
推荐两篇文章:
http://www.crifan.com/switch_character_encoding_notes_ascii_unicode_and_utf-8/
http://www.crifan.com/files/doc/docbook/char_encoding/release/html/char_encoding.html
字符集是各种文字和符号的总称.比如所有的简体中文可以归结为一套字符,所有的英文字母可以归结为一套字符.你也可以把你看到的所有的符号文字数字归结为一套字符.
字符编码
字符编码就是把以上的字符按照一定的规则编成计算机能理解的语言.将计算机中的数值转化为对应的字符,显示出来.所以它做这些事情:一个字符用几个字节来表示,这些字节使用怎样的规则来排布.
所以我们说的ASCII,Unicode等都是编码规则,是人为制定的.
你也可以自己编一套规则,但只有你自己一个人用.意义不大.
有了以上两个概念,我们就可以来看下编码的来龙去脉了
所以后来大家就统一了编码,都使用ASCII.
但在考虑编码的时候,只考虑了英文字母及数字符号等,随着计算机的发展,ASCII的问题就出来了:不同的国家有不同的字母,如我们的中文汉字,就无法用ASCII码表示.
这个时候大家就想,如果有一套规则可以把世界上所有的字符都囊括进来,不就可以统一使用了吗.于是Unicode就诞生了.
Unicode是一个很大的集合,现在的规模可以容纳100多万个符号.每个符号的编码都不一样,既有中文也有英文,还有阿拉伯文,韩文等.但需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储.
这个时候,UTF8就出来了.它实现了Unicode的使用,并且是当前使用最广的一种Unicode的实现方式.
以上就是ASCII,Unicode,UTF-8的来龙去脉了.
对于它们具体的实现细节,可以在上面的文章中看到,这里就不在赘述了.
2个小TIPS:
查看当前使用的编码
判断某个字符是什么编码
在python中,decode是解码,encode是编码.在转换时,可以先解码,再编码.
例
推荐两篇文章:
http://www.crifan.com/switch_character_encoding_notes_ascii_unicode_and_utf-8/
http://www.crifan.com/files/doc/docbook/char_encoding/release/html/char_encoding.html
了解两个概念
字符集字符集是各种文字和符号的总称.比如所有的简体中文可以归结为一套字符,所有的英文字母可以归结为一套字符.你也可以把你看到的所有的符号文字数字归结为一套字符.
字符编码
字符编码就是把以上的字符按照一定的规则编成计算机能理解的语言.将计算机中的数值转化为对应的字符,显示出来.所以它做这些事情:一个字符用几个字节来表示,这些字节使用怎样的规则来排布.
所以我们说的ASCII,Unicode等都是编码规则,是人为制定的.
你也可以自己编一套规则,但只有你自己一个人用.意义不大.
有了以上两个概念,我们就可以来看下编码的来龙去脉了
编码的发展
计算机刚开始出现时,没有统一的编码规则.各个厂家或公司都有自己的做法.可以想象下这种场景:你跑了大老远的路,带了份数据过来,结果在我的计算机上不能正常显示,于是两个人都懵逼了.所以后来大家就统一了编码,都使用ASCII.
但在考虑编码的时候,只考虑了英文字母及数字符号等,随着计算机的发展,ASCII的问题就出来了:不同的国家有不同的字母,如我们的中文汉字,就无法用ASCII码表示.
这个时候大家就想,如果有一套规则可以把世界上所有的字符都囊括进来,不就可以统一使用了吗.于是Unicode就诞生了.
Unicode是一个很大的集合,现在的规模可以容纳100多万个符号.每个符号的编码都不一样,既有中文也有英文,还有阿拉伯文,韩文等.但需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储.
这个时候,UTF8就出来了.它实现了Unicode的使用,并且是当前使用最广的一种Unicode的实现方式.
以上就是ASCII,Unicode,UTF-8的来龙去脉了.
对于它们具体的实现细节,可以在上面的文章中看到,这里就不在赘述了.
2个小TIPS:
UTF8是Unicode的实现方式 utf8要转到GBK时,需先转成Unicode,再转成GBK
python下使用
以下的例子适用于python2查看当前使用的编码
sys.stdin.encoding
判断某个字符是什么编码
chardet.detect()
在python中,decode是解码,encode是编码.在转换时,可以先解码,再编码.
例
In [43]: sys.stdin.encoding Out[43]: 'UTF-8' In [44]: a = '合' In [45]: a Out[45]: '\xe5\x90\x88' In [46]: b = a.decode('utf8') In [47]: b Out[47]: u'\u5408' In [48]: c = b.encode('gbk') In [49]: c Out[49]: '\xba\xcf' In [50]: chardet.detect(c) Out[50]: {'confidence': 0.99, 'encoding': 'GB2312'}
相关文章推荐
- python学习笔记7——列表中整数乘积末尾0的问题
- python微教程---第一季(第一集)----python的安装
- python最简单发送邮件
- python2.7安装OpenCV
- Python程序-打印单词的菱形字符图案
- pip2 与 pip3
- python WEB UI自动化在日期框中动态输入当前日期
- python实现东南大学体育馆自动预约
- python之web业务质量检测
- 从局部变量和全局变量开始全面解析Python中变量的作用域
- Python, 数据抓取
- BuildBinaryTreeby前序遍历和中序遍历 python java leetcode
- Python的安装和环境配置
- 实例讲解Python中global语句下全局变量的值的修改
- 将Mercurial整合到Flask项目中
- 用Python+Django在Eclipse环境下开发web网站【转】
- 最大K个数问题的Python版解法总结
- DepthBinaryTree leetcode java python
- 初心大陆-----python宝典 第二章
- Python基本知识点