Fork me on GitHub

字符串编码详解

字符串编码详解


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

计算机中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
posted @ 2018-03-21 23:03  派对动物  阅读(386)  评论(0编辑  收藏  举报
Top