字符编码

一、字符编码介绍

1、什么是字符

	我们学习python的过程中接触的到字符串类型,其中包含的
文字、英文字母或者符号等都是字符。

2、什么是编码

	我们写下的都是人类能理解的字符。但是计算机只能理解
1和0数字,所以为了让计算机能输入输出我们人类的字符,
就要让计算机知道这些字符。这就是编码,将字符变写成
对应的二进制数字。

3、什么是解码

	解码就是将计算机存储的对应字符的二进制提取出来,并
进行翻译,输出我们人类能认识的字符。

分析过程

x="上"
         内存中
上-------翻译-----0101010
上《----翻译《-----0101010

4、编码的发展

	根据计算机的发展,出现了编码的概念。现代计算机起源于美国
所以为了让计算机能明白字母,美国人发明了与字母对应的表ASCII码
表。
	ASCII表:
    1、只支持英文字符串
    2、采用8位二进制数对应一个英文字符串
    随着计算机的发展,中国人为了让计算机能识别中文与字母,于是
发明了GBK表。每个国家都为了让计算机能识别自己的文字,都设计
了不同的编码方式,制作了各自的字符编码表。

	GBK表:
    1、支持英文字符、中文字符
    2、采用8位(8bit=1Bytes)二进制数对应一个英文字符串
    采用16位(16bit=2Bytes)二进制数对应一个中文字符串
 	随着各国均发展出了各种的字符编码表,每个国家都可以使用计算机
但是问题又随之而来。我们想进行国际交流怎么办?
 	同一组二进制码在不同的国家可能代表不同的字符,我用自家的编码
解码方式去处理别的国家的文件,肯定会出现乱码。这样交流起来就乱套了。
所以万国码unicode出现了。


	unicode(内存中统一使用unicode):
    1、兼容万国字符
        与万国字符都有对应关系
    2、
    采用16位(16bit=2Bytes)二进制数对应一个中文字符串
    个别生僻会采用4Bytes、8Bytes


	unicode表:
                      内存
    人类的字符---------unicode格式的数字----------
                         |                     |
                         |                     |
                         |
                        硬盘                   |
                         |
                         |                     |
                         |                     |
                    GBK格式的二进制       Shift-JIS格式的二进制

    软件是存放于硬盘中的,软件如果要运行则需要读入到内存中,这时就需要一种编
码可以将硬盘中的数据读入到内存中。为了让我们的计算机能够正常运行,不出现乱码
,这时就需要内存中有可以识别、转译万国编码的编码方式。这就是unicode的产生的
缘由。
	字符都是通过内存转换存储到硬盘中的,在内存中的unicode可以将字符转换成
任意格式的字符编码。其他字符编码格式的字符也都可以转换成unicode,但是不
同的编码格式不能通过unicode互转。
	理论上是可以将内存中unicode格式的二进制直接存放于硬盘中的,但由于unicode
固定使用两个字节来存储一个字符,如果多国字符中包含大量的英文字符时,使用
unicode格式存放会额外占用一倍空间(英文字符其实只需要用一个字节存放即可),
然而空间占用并不是最致命的问题,最致命地是当我们由内存写入硬盘时会额外耗
费一倍的时间,所以将内存中的unicode二进制写入硬盘或者基于网络传输时必须
将其转换成一种精简的格式,这种格式即utf-8(全称Unicode Transformation Format,
即unicode的转换格式)
	utf-8:
	    英文->1Bytes
	    汉字->3Bytes

结论:

1、内存固定使用unicode,我们可以改变的是存入硬盘采用格式
    英文+汉字-》unicode-》gbk
    英文+日文-》unicode-》shift-jis
    万国字符》-unicode-》utf-8

2、文本文件存取乱码问题
    存乱了:解决方法是,编码格式应该设置成支持文件内字符串的格式
    取乱了:解决方法是,文件是以什么编码格式存如硬盘的,就应该以什么编码格式读入内存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值