专栏首页python3基础知识:字符编码

基础知识:字符编码

一、字符编码

1、什么实字符编码:将人识别的字符转换成计算机能识别的01,而转换的过程或者规则就是字符编码表。

而这种字符编码表表示了一种对应关系。

2、常用的字符编码表有:ascii、unicode、GBK、Shift_JIS、Euc-kr

3、如何理解字符编码

①、电脑三大核心:cpu -内存-硬盘

②、软件及Python解释器读取文件过程:启动--读取--展示|解释执行

       计算机只认识数字

  很明显,我们平时在使用计算机时,用的都是人类能读懂的字符(用高级语言编程的结果也无非是在文件内写了一堆字符),如何能让计算机读懂人类的字符?

  必须经过一个过程:

  字符--------(翻译过程)------->数字

  这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码

       计算机由美国人发明,最早的字符编码为ASCII,只规定了英文字母数字和一些特殊字符与数字的对应关系。最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号

  当然我们编程语言都用英文没问题,ASCII够用,但是在处理数据时,不同的国家有不同的语言,日本人会在自己的程序中加入日文,中国人会加入中文。

  而要表示中文,单拿一个字节表表示一个汉子,是不可能表达完的(连小学生都认识两千多个汉字),解决方法只有一个,就是一个字节用>8位2进制代表,位数越多,代表的变化就多,这样,就可以尽可能多的表达出不通的汉字

  所以中国人规定了自己的标准gb2312编码,规定了包含中文在内的字符->数字的对应关系。

  日本人规定了自己的Shift_JIS编码

  韩国人规定了自己的Euc-kr编码(另外,韩国人说,计算机是他们发明的,要求世界统一用韩国编码,但世界人民没有搭理他们)

  因为此刻的各种标准都只是规定了自己国家的文字在内的字符跟数字的对应关系,如果单纯采用一种国家的编码格式,那么其余国家语言的文字在解析时就会出现乱码

  所以迫切需要一个世界的标准(能包含全世界的语言)于是unicode应运而生

  ascii用1个字节(8位二进制)代表一个字符

  unicode常用2个字节(16位二进制)代表一个字符,生僻字需要用4个字节

  这时候乱码问题消失了,所有的文档我们都使用但是新问题出现了,如果我们的文档通篇都是英文,你用unicode会比ascii耗费多一倍的空间,在存储和传输上十分的低效

  本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间

4、字符编码总结:

unicode与utf-8采用的是一张unicode编码表,utf-8是unicode编码表体现方式,变长存储数据 变长优点:(大量数据都是以英文存在,所以utf-8空间更小)传输速度更快

二、字符、编码、解码

u' '              Unicode字符串,默认字符

s1 = u'abc你好\n不好'    #\n代表换行符
print(s1)


>>>
abc你好
不好

b' '             字节字符串

s2 = b'abc123\xb7\xb7'
print(s2)


>>>b'abc123\xb7\xb7'

r' '          原义字符串,不对字符串内存做任何操作

s3 = r'abc你好\n不好'
print(s3)

>>>abc你好\n不好       #此时的换行符不起作用,因为原义字符串不做任何操作。

编码encode与解码decode:

编码:我们能看懂的  编给机器 看 的过程

s='123哈哈'
s1=bytes(s,encoding='utf-8')
print(s1)

>>>b'123\xe5\x93\x88\xe5\x93\x88'

#结果解释:这里的\x代表16进制的意思,一个16进制需要占用4个bit,所以2个16进制就是8个bit也就是1个字节(Bytes),所以\xe5代表2个16进制一个字节,\x93、\x88各代表2个16进制,一个字节。后面三个重复,所以用utf-8编码,这里的一个汉字‘哈’占用3个字节。
解码:把机器能看懂的 解释给我们人看的过程

b1= b'\xe4\xbd\xa0\xe5\xa5\xbd'
b2=str(b1,encoding='utf-8')
print(b2)


>>>你好

编码、解码:

将u‘’字符串转成b‘’字符串   编码
u1=u'你好'
b1=u1.encode('utf-8')
print(b1)


>>>b'\xe4\xbd\xa0\xe5\xa5\xbd'
将b‘’字符转换成u‘’字符     解码
b2=b'\xe4\xbd\xa0\xe5\xa5\xbd'
u2=b2.decode('utf-8')
print(u2)

>>>你好

三 、文件操作

待处理

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 字符编码简介

      ASCII(American Standard Code for Information Interchange,美国信息交换标准代码),是一种单字节编码。...

    用户2398817
  • 流畅的 Python - 3. 文本与

    由于一开始接触的就是 Python3,所以一些在 Python2 上的编码上的坑我没遇到,甚至在 Python3 上都很少遇到编码问题,因为 Python3 默...

    用户2398817
  • python的encode和decode

        encode():编码,将对象的编码转换为指定编码格式,按照字面理解,一直以为是其他编码格式转换成unicode格式编码

    用户2398817
  • 漫谈计算机编码

    我们知道,在计算机内部,所有的信息都是以二进制形式进行存储。无论是字符,或是视频音频文件,最终都会对应到一串由 0 和 1 构成的数字串。所以从我们能看懂的人类...

    Single
  • 字节码:ASCII编码:单字节编码,ANSI编码:多字节编码,UNICODE编码:宽字节编码

    字符是人们常用的一些记号,比如”1”, “汉”, “お”,”℃”等等,包括各种语系的语言和一些符号都可以被称为字符。 字节是计算机存储数据的存储单元,是一个8位...

    学到老
  • 字节码:ASCII编码:单字节编码,ANSI编码:多字节编码,UNICODE编码:宽字节编码

    字符是人们常用的一些记号,比如”1”, “汉”, “お”,”℃”等等,包括各种语系的语言和一些符号都可以被称为字符。 字节是计算机存储数据的存储单元,是一个...

    学到老
  • java中byte, iso-8859-1, UTF-8,乱码的根源

    Post@https://ryan-miao.github.io 测试代码https://github.com/Ryan-Miao/someTest/comm...

    Ryan-Miao
  • 一篇文章帮你解决中文乱码问题---JavaWeb中文编码问题全面解析

    这就是为什么我们在浏览器的地址栏中能看到中文,但是把地址拷贝出来后中文就变成了一些奇怪的串了。

    谭庆波
  • Java中编码问题

    在开发过程中经常会遇到一会乱码问题,不是什么大问题,但是也挺烦人的,今天来将我们开发总结的经验记录下来,希望可以给大家一些帮助。

    用代码征服天下
  • 计算机程序的思维逻辑 (6) - 如何从乱码中恢复 (上)?

    我们在处理文件、浏览网页、编写程序时,时不时会碰到乱码的情况。乱码几乎总是令人心烦,让人困惑。希望通过本节和下节文章,你可以自信从容地面对乱码,恢复乱码。 谈...

    swiftma

扫码关注云+社区

领取腾讯云代金券