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. 代码规 ...
随机推荐
- winform 查看远程服务器上的文件
解决方案: 1. 在目标服务器上发布webservice,实现文件下载的方法. using System; using System.Collections.Generic; using System ...
- 分析并实现 360 P1路由器上的测速功能(也可以针对金山测速功能)
现在各种智能路由器以及一些PC上的防火墙软件,都提供网络测速功能.笔者对此进行了研究,并在自己的路由器上也实现了此功能.下面做一下总结 一般的网络测速,主要关注两个方面:网络延迟和下载速率 1.网络延 ...
- flutter table 在showModalBottomSheet中
问题是,不知道为什么又可以了.原来是显示黑屏,没有输出. showModalBottomSheet<void>( context: context, builder: (BuildCont ...
- 8237dma的四种传送方式简介
8237A有四种工作方式:单字节传送.数据块传送.请求传送和多片级联. (1)单字节传送(single mode) 单字节传送方式是每次DMA传送时,仅传送一个字节.传送一个字节之后,当前字节计数器减 ...
- struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象、临时对象、固定名称的对象、Action对象
struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象.临时对象.固定名称的对象.Action对象 解答:struts2的值栈排列顺序为:1).临时对象:2).模型对象:3).Ac ...
- 什么是 AJAX ?
什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味 ...
- SQLServer2008设置开启远程连接
SQL Server 2008默认是不允许远程连接的,sa帐户默认禁用的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,需要做两个部分的配置: 1,SQL Serve ...
- 基于Bootstrap样式的 jQuery UI 控件 (v0.5).
网址:http://www.shouce.ren/example/show/s/6444#download-bootstrap
- DB水平切换要点
分区健选择 数据应该怎样拆分,依照什么纬度来拆分 节点路由 应用程序写死/客户端(TDDL,cobar-client)/中间层(cobar-server) 固定分配/动态分配/混合 分片数据均衡 某些 ...
- 学习-go语言坑之for range
引用自 http://studygolang.com/articles/9701 go只提供了一种循环方式,即for循环,在使用时可以像c那样使用,也可以通过for range方式遍历容器类型如数组. ...