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. 代码规 ...
随机推荐
- html获取js中的值
1.在html中添加标签<span id="id"></span> 2.在js代码中往id的标签塞值就可以了:$("#id").text ...
- 网站真分页js代码该怎么写?
真分页这个词对程序猿们来说,并不是一个陌生的词汇,但是如果你是初次学习真分页,或许还是得花点时间小小研究下,下面是之前去转盘网(喜欢的可以看看,也可以进入引擎模式)的真分页js部分代码,html部分的 ...
- bcrypt install `node-pre-gyp install --fallback-to-build`
npm安装parse-server的过程中遇到了2次错误 尝试1 ganiks@ganiks-ubuntu-trusty-64:~$ sudo npm i -g parse-server npm WA ...
- hdu6000 Wash 巧妙地贪心
/** 题目:hdu6000 Wash 巧妙地贪心 链接:https://vjudge.net/contest/173364#problem/B 转自:http://blog.csdn.net/ove ...
- 【Android Studio】之构建项目报错
问题1: 报错: Could not download fastutil.jar (it.unimi.dsi:fastutil:7.2.0): No cached version available ...
- jQuery Colorbox使用教程
jQuery Colorbox是一款弹出层,内容播放插件,效果极佳,最关键的是大小只有10KB,当然我主要是用来弹出图片啦,(之前介绍过jquery Fancybox插件,个人很喜欢).jQuery ...
- Django - 安装Ckeditor
1. Ckedior.js CKEDITOR.editorConfig = function( config ) { // config.filebrowserUploadUrl="/blo ...
- django用户认证系统——重置密码7
当用户不小心忘记了密码时,网站需要提供让用户找回账户密码的功能.在示例项目中,我们将发送一封含有重置用户密码链接的邮件到用户注册时的邮箱,用户点击收到的链接就可以重置他的密码,下面是具体做法. 发送邮 ...
- 高性能javascript 文件加载阻塞
高性能javascript javascript脚本执行过程中会中断页面加载,直到脚本执行完毕,此操作阻塞了页面加载,造成性能问题. 脚本位置和加载顺序:如果将脚本放在head内,那么再脚本执行完 ...
- AngularJS 讲解,一 数据绑定
AngularJS 完全使用javascript 编写的客户端技术.通过原生的Model-View-Controller(MVC,模型视图控制器)功能增强了HTML.这个选择可以快捷和愉悦地构建出 ...