关于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编码总结的更多相关文章

  1. (转载) 浅谈python编码处理

    最近业务中需要用 Python 写一些脚本.尽管脚本的交互只是命令行 + 日志输出,但是为了让界面友好些,我还是决定用中文输出日志信息. 很快,我就遇到了异常: UnicodeEncodeError: ...

  2. Python 编码简单说

    先说说什么是编码. 编码(encoding)就是把一个字符映射到计算机底层使用的二进制码.编码方案(encoding scheme)规定了字符串是如何编码的. python编码,其实就是对python ...

  3. Python之路3【知识点】白话Python编码和文件操作

    Python文件头部模板 先说个小知识点:如何在创建文件的时候自动添加文件的头部信息! 通过:file--settings 每次都通过file--setings打开设置页面太麻烦了!可以通过:View ...

  4. python编码规范

    python编码规范 文件及目录规范 文件保存为 utf-8 格式. 程序首行必须为编码声明:# -*- coding:utf-8 -*- 文件名全部小写. 代码风格 空格 设置用空格符替换TAB符. ...

  5. 【转】python编码的问题

    摘要: 为了在源代码中支持非ASCII字符,必须在源文件的第一行或者第二行显示地指定编码格式: # coding=utf-8 或者是: #!/usr/bin/python # -*- coding: ...

  6. 【转】python编码规范

    http://blog.csdn.net/willhuo/article/details/49300441 决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是 ...

  7. python 编码 UnicodeDecodeError

    将一个py脚本从Centos转到win运行,出错如下: UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: il ...

  8. Python编码/文件读取/多线程

    Python编码/文件读取/多线程 个人笔记~~记录才有成长   编码/文件读取/多线程 编码 常用的一般是gbk.utf-8,而在python中字符串一般是用Unicode来操作,这样才能按照单个字 ...

  9. 关于Python编码,超诡异的,我也是醉了

    Python的编码问题,真是让人醉了.最近碰到的问题还真不少.比如中文文件名.csv .python对外呈现不一致啊,感觉好不公平. 没图说个JB,下面立马上图.   我早些时候的其他脚本,csv都是 ...

  10. 规范的python编码

    规范的 python 编码令人赏心悦目,令代码的表达逻辑更清晰,使得工程代码更容易被维护和交流: 编码规范包括对于代码书写格式的约束,不良语法的禁用和推荐的编码手法,下面做些简要的描述: 1. 代码规 ...

随机推荐

  1. iOS 转盘抽奖游戏(原生)

    转盘抽奖游戏在一般的app中都会有,应该算是一种吸引用户的一种手段.在项目中集成转盘抽奖游戏,大都采用h5的方式来实现,但是由于项目需求,需要在app中使用原生来实现转盘抽奖.实现原理也很简单,中间的 ...

  2. Ubuntu 启动项、菜单 改动 防止隐藏

    因为电脑有多个系统,默认的grub引引导菜单是隐藏的,须要略微改动下方可显示 不要直接改动boot/grub/grub.cfg  要直接改动/etc/default/grub,然后update-gru ...

  3. 使用AccessibilityService实现微信自己主动抢红包

    近期要实现微信自己主动抢红包的功能.使用AccessibilityService来开发,这里主要写一下逻辑以及注意点. 注意点 1.搜索keyword 我们实现某个功能比方点击等须要找到相应的对象然后 ...

  4. 关于selenium IDE找不到元素bug

    使用 selenium IDE 录制脚本,经常会发生 这样一种错误. 页面上,明明存在这个元素,就是找不到. 其实原理很简单   , 按钮 点击,没有时间延迟,但是页面加载,需要一段时间. 页面元素还 ...

  5. C++ STL标准模板库(queue)

    //queue的使用 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<queue> using name ...

  6. ACM 博弈(难)题练习 (第二弹)

    第一弹: Moscow Pre-Finals Workshop 2016 - Kent Nikaido Contest 1 Problem K. Pyramid Game http://opentra ...

  7. poj 1659(havel算法)

    题目链接:http://poj.org/problem?id=1659 思路:  havel算法的应用: (1)对序列从大到小进行排序. (2)设最大的度数为 t ,把最大的度数置0,然后把最大度数后 ...

  8. UIWebview打开.txt文件中文乱码解决

    用UIWebview打开txt文件有时候会出现乱码的情况,这种情况应该是txt的编码问题,解决方案如下: txt分带编码和不带编码两种,带编码的如UTF-8格式txt,不带编码的如ANSI格式txt. ...

  9. hdu3625(第一类斯特林数)

    与第二类有些区别! #include <stdio.h> #include <stdlib.h> #include <string.h> #include < ...

  10. 在javascript中NodeList和Array的区别及转换方法

    随着深入理解javascript 后对于一些小知识的了解慢慢加深,这里说的是关于nodelist和array的区别,相信你一定用过toarray()方法,但是这里通过js 的方法讲解nodelist ...