python编码总结
关于ASCII码和Unicode码的来源
计算机只能处理数字,如果要处理文本,需要先将文本转换成数字。早期计算机采用8bit作为一个字节(byte)。所以一个字节最大为255(二进制11111111=十进制255),更大的数字需要更长的字节。
由于计算机是美国人发明,最早只有127个字符被编码到计算机中,即英文常见的大小写字母,数字和一些符合,这个编码表就是ASCII编码。
但是世界各地有各种语言,所以ASCII码不能满足需求了。所以中国制定了GB2312编码,把中文加进去了。其他国家也都有自己的编码。为了统一这个问题,需要一套新的编码,Unicode应运而生。它把所有的语言都统一到这套编码,解决了乱码问题。Unicode也在发展,常用的Unicode是2个字节,非常偏僻的字符需要4个字节。
虽然Unicode解决了乱码问题,但是又产生一个效率问题,Unicode编码币ASCII编码多一倍的存储空间,存储和传输效率降低了。
为了解决这个问题,又出现了把Unicode编码转化成可变长度编码的UTF-8编码。UTF-8是一种把Unicode字符根据不同数字大小分成1-6字节,常用的英文被编成1个字节,汉子通常3个字节,只有生僻的字符才会编码成4-6字节。
python编码
- 一般情况下,windows是gbk编码,linux是utf8编码
- python编程中
系统编码,python编码,文件编码概念
- 系统编码:默认写源码的编辑器的编码方式。它代表了源码文件内的所有内容都是工具此方式编码成二进制流。存入磁盘内。
- python编码:指python内部设置的编码方式。如果不设定的话,python默认ASCII解码方式。如果python源码出现中文的话,默认的ASCII解码会出现问题。要设置成utf8解码。
设置方法:在源文件开头第一行:#-coding:UTF-8-- 或者import sys
reload(sys)
sys.setdefaultencoding('UTF-8')
- 文件编码:文本的编码方式
python代码中字符串的默认编码与代码文件本身的编码一致。
乱码问题
一般输出乱码的原因就是因为没有按照系统解码的方式就行编码
比如,比如print s, s类型为str,linux系统下系统默认编码为utf8编码,s在输出前就应该编码为utf8。如果s为gbk编码就应该这样输出。print s.decode('gbk').encode('utf8')才能输出中文。window下面情况相同,window默认编码为gbk编码,所以s输出前必须编码为gbk。
python编码转换
字符串在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编码检测
可以用isinstance(s, unicode) 来判断是否为unicode,但是这样效率太低,之前我不一定知道字符串是什么编码。所以可以借助python库来完成。
可以用chardet库来实现。下载chardet之后,解压,在里面会得到一个chardet文件夹,把该文件夹放入Lib\site-packages文件夹中即可。
import urllib
import chardet
rawdata = urllib.urlopen('http://www.google.cn/').read()
print chardet.detect(rawdata)
>输出 {'confidence': 0.98999999999999999, 'encoding': 'GB2312'}即可知道编码是GB2312.python编码总结的更多相关文章
- (转载) 浅谈python编码处理
		最近业务中需要用 Python 写一些脚本.尽管脚本的交互只是命令行 + 日志输出,但是为了让界面友好些,我还是决定用中文输出日志信息. 很快,我就遇到了异常: UnicodeEncodeError: ... 
- Python 编码简单说
		先说说什么是编码. 编码(encoding)就是把一个字符映射到计算机底层使用的二进制码.编码方案(encoding scheme)规定了字符串是如何编码的. python编码,其实就是对python ... 
- Python之路3【知识点】白话Python编码和文件操作
		Python文件头部模板 先说个小知识点:如何在创建文件的时候自动添加文件的头部信息! 通过:file--settings 每次都通过file--setings打开设置页面太麻烦了!可以通过:View ... 
- python编码规范
		python编码规范 文件及目录规范 文件保存为 utf-8 格式. 程序首行必须为编码声明:# -*- coding:utf-8 -*- 文件名全部小写. 代码风格 空格 设置用空格符替换TAB符. ... 
- 【转】python编码的问题
		摘要: 为了在源代码中支持非ASCII字符,必须在源文件的第一行或者第二行显示地指定编码格式: # coding=utf-8 或者是: #!/usr/bin/python # -*- coding: ... 
- 【转】python编码规范
		http://blog.csdn.net/willhuo/article/details/49300441 决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是 ... 
- python 编码  UnicodeDecodeError
		将一个py脚本从Centos转到win运行,出错如下: UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: il ... 
- Python编码/文件读取/多线程
		Python编码/文件读取/多线程 个人笔记~~记录才有成长 编码/文件读取/多线程 编码 常用的一般是gbk.utf-8,而在python中字符串一般是用Unicode来操作,这样才能按照单个字 ... 
- 关于Python编码,超诡异的,我也是醉了
		Python的编码问题,真是让人醉了.最近碰到的问题还真不少.比如中文文件名.csv .python对外呈现不一致啊,感觉好不公平. 没图说个JB,下面立马上图. 我早些时候的其他脚本,csv都是 ... 
- 规范的python编码
		规范的 python 编码令人赏心悦目,令代码的表达逻辑更清晰,使得工程代码更容易被维护和交流: 编码规范包括对于代码书写格式的约束,不良语法的禁用和推荐的编码手法,下面做些简要的描述: 1. 代码规 ... 
随机推荐
- HTML5七巧板canvas绘图
			<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ... 
- Codeforces Round #256 (Div. 2) C. Painting Fence(分治贪心)
			题目链接:http://codeforces.com/problemset/problem/448/C C. Painting Fence time limit per test 1 second m ... 
- [转]OpenMP中的private/firstprivate/lastprivate/threadprivate之间的比较
			转自:http://blog.csdn.net/gengshenghong/article/details/6985431 private/firstprivate/lastprivate/threa ... 
- Linux----文件I/O
			1.文件描写叙述符:每次我们打开一个文件,就会得到一个相应于该文件的较小的整数,这个整数就是这个文件的文件描写叙述符. 在shell操作中,0,1,2这三个文件描写叙述附总是打开的.一般是指向shel ... 
- 基于WebBrowser 的爬虫程序
			WebBrowser的属性和事件 WebBrowser 如何跳转页面 web.Navigate(""); WebBrowser 如何循环跳转获取页面内容 bool loading ... 
- python文件的编译
			背景知识 pyc文件: .pyc 是一种二进制文件,是由 .py 文件经过编译后,生成一种byte code文件. .py 文件变成 .pyc 文件后,加载的速度有所提高,而且 .pyc 是一种跨平台 ... 
- 嵌入式开发之示波器----tektronix tds2024 的使用
			http://jingyan.baidu.com/article/91f5db1bf715c01c7f05e39a.html http://cn.tek.com/learning/oscillosco ... 
- 从头认识java-17.4 具体解释同步(2)-具体解释竞争条件
			这一章节我们来具体讨论一下竞争条件. 1.为什么会引起竞争条件? 因为操作缺失原子性. 2.什么是原子性? 所谓原子操作是指不会被线程调度机制打断的操作:这样的操作一旦開始,就一直运行到结束.中间不会 ... 
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.3——使用Robotium进行功能测试
			问题: 你想要使用Robotium库测试activity. 解决方案: 增加Robotium依赖,编写自己的测试脚本. 讨论: Android Test Support Library提供类可以操作a ... 
- Delphi 中窗口文件与无窗口Pas文件的区别 (MTM)
			implementation {$R *.dfm} ---- 带窗口的 dfm -- 一般的 windows 窗口 {$R *.fmx} ---- 带窗口的 fmx -- 一般的 FireMonk ... 
