美文网首页
理解字符编码

理解字符编码

作者: GIAO兄giao弟 | 来源:发表于2018-12-10 21:11 被阅读0次

什么是字符编码

我们知道编程就是我们人类给计算机发送指令让计算机进行计算,先抛开我们怎样给计算机发指令这个问题不说,你发的指令计算机总得能听懂吧,计算机不像我们人类,在它的世界里只有一种语言,那就是0或1(高低电平两种状态),其实就是二进制数。
ok,那我们定个标准吧,用哪些二进制数来表示哪些符号,这样你对计算机说一个二进制数它就会知道你要发送的指令了。其实此时我们手中这个二进制和符号的对应表就能称为一个编码表了,你有你的编码表,我有我的编码表,我对我的计算机发指令它能根据编码对应关系识别出来,我用你电脑的时候发指令如果不按照你的对应关系发,它肯定听不懂我的话啊,咱俩的表一样不就完了么,老铁

ASCII

计算机是美国人发明的,上边的问题美国人遇到了,然后他们就建立了第一个编码表,
ASCII表,这个表建立的早啊,没想那么多,所以只有英文字母数字和一些字符与二进制数字的对应关系:
二进制大家都知道 0000 0001
这样的一个8位2进制数,它转换成10进制其实有256个值,ASCII码就是用8位2进制来表示所有的符号的,也就是说ASCII编码表最多只能表示256个符号,8位二进制也叫一个字节,所以也可以说ASCII用一个字节代表一个字符
这个表的对应关系大家都能看懂吧


图片.png

其他字符编码

ascii可以编程了,好,各国开始用它做编程,问题来了, 每个国家都有每个国家的语言不可能每个国家都用英文啊,这时候每个国家的科学家们又建立了一种自己用着舒服的字符编码,举个栗子
中国规定了自己的标准,GB2312(其中包含了中文和数字对应关系)
日本也有自己的标准,Shift_JIS

unicode

每个国家现在都有了自己的字符编码,如果小明精通8国语言,用8中语言来编写程序的话,计算机还能听懂么,所以就有了一个包含世界所有语言和数字对应关系的标准,伟大的unicode
优点:精通世界所有语言,无论谁用这套标准都可以操作计算机
缺点:如同厚厚的新华字典,占用空间大(一般用两个字节(16位二进制)代表一个字符,生僻字的话还要用4个字节)

utf-8

好了,用了unicode我们现在可以随心所欲的编程了,再也不用担心计算机乱码了,但是别忘了,unicode有一个缺点,就是占用空间大,无论存储还是传输的时候都是弊端,于是有了utf-8(可变长编码),utf-8的可变长体现在:一般常用的英文用1个字节表示,汉字通常是3个,只有特别生僻的字采用4-6个字节,如果要传输的文本包含大量英文,用utf比unicode节约的空间可不是一点点

文件乱码问题

我们对计算机当中文件的修改都是通过把文件加载到内存中去操作的,这里在内存中的编码当然是unicode(不管你是什么编码,通通一把梭),但是操作之后,如果把文件存储或者传输的话,就要考虑文件的大小了,所以为了空间考虑,在存盘的时候要把unicode转变成utf-8格式(一般来说都是utf-8,你也可以填你喜欢的)
如果我们存的时候用utf-8,拿出来读的时候也要是utf-8,否则就会乱码,比如:

图片.png
图片.png
所以,想要不乱码:用什么方式编码的,就要用什么方式解码

str和bytes类型

str 字符串类型(存在于内存中,我们可以操作)
bytes 比特流,存在形式是二进制(用于存储和网络传输)

a = "好"
b = a.encode("utf-8")
print(b)  # b'\xe5\xa5\xbd' 把字符串编码为比特流,默认是16进制
c = b.decode("utf-8")
print(c)  # 好 ,把bytes 解码转化为字符串,解码的编码为utf-8'''```

相关文章

  • 深入理解Emoji(三) —— Emoji详解

    深入理解Emoji(一) —— 字符集,字符集编码深入理解Emoji(二) —— 字节序和BOM Emoji字符是...

  • [转]【字符编码】彻底理解字符编码

    一、前言 在解决昨天的问题时,又引出了很多新的问题,如为什么要进行编码,这些编码的关系如何,如ASCII,IOS-...

  • 理解字符编码

    什么是字符编码 我们知道编程就是我们人类给计算机发送指令让计算机进行计算,先抛开我们怎样给计算机发指令这个问题不说...

  • 不同的编码与编码规则

    推荐文章:网页编码就是那点事Unicode 和 UTF-8 有何区别? 编码 个人理解: URL编码实际是将字符的...

  • 部分知识点

    chr(编码值) - 将字符编码转换成字符 ord(字符) - 获取字符对应的编码值 可以将字符编码放到字符串中便...

  • 关于base64编码

    链接:关于base64编码讲得真好我理解的base64编码就是将一个字符串“abc”,比方说asc编码字符串“ab...

  • 彻底理解字符编码

    一、前言 为什么要进行编码,这些编码的关系如何,如ASCII,IOS-8859-1,GB2312,GBK,Unic...

  • 对字符编码的理解

    写在前面:雨夜难眠,就起来学习了一下字符编码的知识。感谢大神们写的博客,参考博客链接已经附在文章末尾。用了几个小时...

  • Python字符编码之理解

    在从普通程序员进阶到优秀程序员的路上,字符编码是一个不得不跨过去的坎,我们几乎所有的程序都会涉及到字符处理,如果跨...

  • 字符编码知识梳理

    [toc] 字符编码: 字符编码(英语:Character encoding)、字集码是把字符集中的字符编码为指定...

网友评论

      本文标题:理解字符编码

      本文链接:https://www.haomeiwen.com/subject/rdkkhqtx.html