zoukankan      html  css  js  c++  java
  • 字符串编码详解

    字符串编码详解


    计算机只能处理数字,文本转换成数字才能处理。

    计算机中8个bit作为一个字节byte,所以一个字节最大的表示数字就是255
    

    ASCII码

    一个字节表示 --- 美国的标准编码 ---- 最多表示255个字符
    

    中国 GB2312

    用两个字节表示一个汉字,把ascii码也包含进去
    

    unicode

    全球统一的编码 ,用16,32bit 把 所有的语言都统一到一套编码中
    

    例子:

    字母 A  -- ASCII 65       uincode  0000 0000 0100 0001        二进制  0100 0001
    
    汉字 中 -- ASCII 已经超出  uinicode 20013                      二进制  0100 1110 0010 1101
    
    unicode --- 英文会多一倍的空间,和传输时间
    

    utf-8

    可变长 编码 ---utf-8
    用于传输和储存(3个字节表示一个中文)
    

    注意 : 在内存计算,编程的时候 --- 定长的 unicode 更好使用


    python中获取 默认的解码方式

    import sys
    sys.getdefaultencoding()
    
    
    	python 2.x 需要在文件上方声明文件的编码方式# -*- coding: utf8 -*-,可以通过str.decode/str.encode处理字符串的文本编码
    	保证 python 编辑器的编码正确,或使用 u’中文’保证被转换成 unicode 编码,推荐使用
    	sys.setdefaultencoding('utf-8')来保证我们的编码
    

    python解释器在 运行py文件的时候,遇到(没有指定 decode 方式的情况下) str 会按照 默认的解码方式进行解码;

    即 sys.getdefaultencoding()得到的编码方式, 所以py2中的中文会和ascii冲突出错,需要开头指定 解码方式

    py2 -- ascii   需要 *coding:utf8* 指明,, 或者u’中文’保证被转换成 unicode 编码
    py3 -- utf8
    

    例子:

    (1)    s = '你好'
            r = s.decode('utf-8').encode('gb2312')
            print r
      报错   SyntaxError: Non-ASCII character 'xe4' in file
    
     (2)   # _*_coding:utf-8_*_
            s = '你好'
            r = s.decode('utf-8').encode('gb2312')
            print r
      正确
    

    这种问题在py3 中已经不存在

    py 2 有str 和 unicode 两种 数据类型,str类型需要 先decode
    py 3 只有 unicode,所以可以直接encode
    
    
         window  --- gb2312编码
         linux   ---- utf8
    
     	 enocde 之前 要先转换成 unicode
  • 相关阅读:
    怎样修改flash builder注释里的@author
    target与currentTarget的区别?
    java ByteBuffer flip()和limit()的理解
    flashplayer重绘机制
    Flex sdk4.6及flex Builder 4.6下载地址
    关闭MyEclipse Derby服务
    chrome浏览器设置debug版本的flashplayer
    C# MySql 整理
    windows下查看及修改DNS服务器
    eclipse引入第三方jar包
  • 原文地址:https://www.cnblogs.com/big-handsome-guy/p/8620454.html
Copyright © 2011-2022 走看看