第四章 字符编码

Posted 蜗牛也是妞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四章 字符编码相关的知识,希望对你有一定的参考价值。

1、存取文件不乱码的法则:用什么编码存的,就要用什么编码读

2、           decode             encode

bytes------------->unicode---------->bytes

3、python3解释器默认使用的字符编码是utf-8

      python2解释器默认使用的字符编码是ascii

4、python2的str就是python3的bytes

      python2的unicode就是python3的str

总结字符编码的发展可分为三个阶段:

阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII

ASCII一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可以表示256个字符

阶段二:为了满足中文和英文,中国人定制了GBK

GBK:2Bytes代表一个中文字符,1Bytes表示一个英文字符;为了满足其他国家,各个国家纷纷定制了自己的编码,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里

阶段三:各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

于是出现了unicode(定长), 统一用2Bytes代表一个字符, 虽然2**16-1=65535,但unicode却可以存放100w+个字符,因为unicode存放了与其他编码的映射关系,准确地说unicode并不是一种严格意义上的字符编码表。很明显对于通篇都是英文的文本来说,unicode的式无疑是多了一倍的存储空间,于是产生了UTF-8(可变长,全称Unicode Transformation Format),对英文字符只用1Bytes表示,对中文字符用3Bytes,对其他生僻字用更多的Bytes去存

 

要想保证文件不乱码,用什么编码存的就用什么编码取.
x=‘上‘

python2:启动python解释器,把文件从内存读出(以默认ASCII码), bytes=str

申请内存空间存储字符串

#coding:gbk

print(‘‘)

print([x])

内存空间存的值[‘\xc9\xcf‘] #(GBK),2个bytes,4个16进制数

print([x.decode(‘gbk‘)]) #以什么编码存的就用什么编码取

[u‘\u4e0a‘](unicode) #解码

 

y=x.decode(‘gbk‘) #y是Unicode类型,可以转化为任意类型

print([y.encode(‘utf-8‘)])

 

x=u‘上‘

print(type(x)) #python2 有直接的unicode的类型,可以encode其他编码.建议都加u

unicode

打印编码:pycharm的终端是utf8的编码,要按照打印终端的编码来显示出来.

windows的终端是gbk的编码

linux的终端是utf8的编码

python3:启动python解释器,把文件从内存读出(以默认UTF-8码) #coding:gbk 告诉python解释器以什么编码读取存储字符串

x=‘

y=x.encode(‘gbk‘) #只能encode证明python3默认就是以unicode存.

print(y,type(y))

b‘\xc9\xcf‘ <class ‘bytes‘> #python3的bytes类型就是python2的str类型,所有的字符串编码都是bytes类型

#文件编码(存)默认就是utf-8类型,字符串编码默认是unicode类型

以上是关于第四章 字符编码的主要内容,如果未能解决你的问题,请参考以下文章

XSS的原理分析与解剖:第四章(编码与绕过)*******************未看**********************

python GSM 7bit 编码

如何查看mysql数据库的编码字符集

数据压缩 第四次作业

python第四十六天 数据库总结

第四节:乱码的前世今生——字符集和比较规则