zoukankan      html  css  js  c++  java
  • 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.
    终身学习
  • 相关阅读:
    static生命周期
    VS2008 JS调试和Silverlight 后台代码调试 相互影响的问题。自己做实例证明
    思考记跳出以往的自己
    javascript setAttribute使用方法 查缺补漏
    克服浮躁,踏实工作,控制自我
    DES加密GUID+文件名称,关于DES加密后文件长度是否超过WINDOWS文件命名规定长度255个字节。
    阅读WPF揭秘前两章探索Silverlight运行的基本原理和RIA工作流程的密码()
    Silverlight运行原理经典问答。
    HTML 实用标签 (你不知道的HTML)
    ASP.NET项目整合 (Silverlight 和 WEB Service ) 过程及原理
  • 原文地址:https://www.cnblogs.com/qcssmd/p/5195044.html
Copyright © 2011-2022 走看看