编码 编码的转化

摘要:
什么是字符编码因为计算机是外国人创造的所以计算机最开始只能识别最开始的基本数字计算机要想工作必须通电,也就是说‘电’驱使计算机干活,而‘电’的特性,就是高低电平,也就是说计算机只认识数字很明显,我们平时在使用计算机时,用的都是人类能读懂的字符,如何能让计算机读懂人类的字符?
什么是字符编码

因为计算机是外国人创造的所以计算机最开始只能识别最开始的基本数字(毕竟是外国人创造的所以最开始是不支持伟大的汉语 ,所以everybody努力学习吧 创造 我们自己的伟大的技术)

计算机要想工作必须通电,也就是说‘电’驱使计算机干活,而‘电’的特性,就是高低电平(高低平即二进制数1,低电平即二进制数0),也就是说计算机只认识数字

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

必须经过一个过程:

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

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

以下两个场景下涉及到字符编码的问题:

1:一个python文件中的内容是由一堆字符组成的(python文件未执行的时候)

2:python 中的数据类型,字符串是由一串字符组成的(python文件执行的时候)

字符编码的发展史

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

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

ASCII最初只用了后七位,127个数字,已经完全能够代表键盘上所有的字符了(英文字符/键盘的所有其他字符)

后来为了将拉丁文也编码进了ASCII表,将最高位也占用了

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

GBK:2Bytes代表一个字符

为了满足其他国家,各个国家纷纷定制了自己的编码

日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr

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

unique:对于python2各字节一个字符 python3就是4位一个字符

于是产生了unicode, 前期统一用2Bytes代表一个字符, 2**16-1=65535,可代表6万多个字符, 后期使用4各字节代表一个字符因而兼容万国语言

但对于通篇都是英文的文本来说,这种编码方式无疑是多了一倍的存储空间(二进制最终都是以电或者磁的方式存储到存储介质中的)

于是产生了UTF-8,对英文字符只用1Bytes表示,对中文字符用3Bytes

需要强调的一点是:

unicode:简单粗暴,所有字符都是4Bytes,优点是字符->数字的转换速度快,缺点是占用空间大

utf-8:精准,对不同的字符用不同的长度表示,优点是节省空间,缺点是:字符->数字的转换速度慢,因为每次都需要计算出字符需要多长的Bytes才能够准确表示

编码 编码的转化第1张

在python3 中str的类型是unicode(万国码)如果str'想要显示出来 必须是要转化的 那么我们需要把str转化为非unicode类型(bytes)的

字符串在python3中就是默认为unicode的形式的 所以我们必须转化bytes才能显示出来 就好比你发送一段python代码 那么里面的字符串 你要先转化为Unicode类型的 python解释器才能 识别发送 然后接收后 为了显示出来那么 python解释器再编码成非Unicode类型的 才能显示出来 这就是编码的过程 我们编码需要用encode

>>> s= 'alex'
>>> sl = s.encode('utf-8')   #编码  str-->bytes
>>>
s= 'hello girl'
sl = s.encode('utf-8')   #str----->utf-8
print(sl)

如果我们想要把非Unicode类型的先转化为Unicode 那么用decode

编码 编码的转化第2张

如果一个utf-8要转换为gbk不能直接转化 需要用decode先转换成unicode 然后再用encode转换为gbk

s = 'alex'
s1 = s.encode('gbk')  #转化为gbk
s2 = s1.decode('gbk')  #gbk转化为unicode
s = s2.encode('utf-8') #unicode 转化为utf-8
print(s.decode('UTF-8'))  #然后解码转化为Unicode  因为计算机只是别unicode所以必须转化为unicode类型的才能显示

计算机所显示的所有文字 数字都是unicode类型的 传输的时候必须要线转码,转为可以传输的字节码才能和电信号交互进行传递

编码 编码的转化第3张

免责声明:文章转载自《编码 编码的转化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C++中stringstream的使用方法和样例构建 Owin 中间件 来获取客户端IP地址下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

中文分词系列(一) 双数组Tire树(DART)详解

1 双数组Tire树简介   双数组Tire树是Tire树的升级版,Tire取自英文Retrieval中的一部分,即检索树,又称作字典树或者键树。下面简单介绍一下Tire树。 1.1 Tire树 Trie是一种高效的索引方法,它实际上是一种确定有限自动机(DFA),在树的结构中,每一个结点对应一个DFA状态,每一个从父结点指向子结点(有向)标记的边对应一...

Doskey命令详解

转自:https://blog.csdn.net/u012993732/article/details/48626921 调用 Doskey.exe,它撤回 Windows XP 命令、编辑命令行并创建宏。 MS-DOS命令语法 doskey {/reinstall | /listsize=size | /macros:[{all | exename}]...

Ubuntu18.04+GTX1080Ti+CUDA9.0+cuDNN7.0+TensorFlow-GPU1.9环境搭建

注:下面的的驱动版本不要安装最新(默认)的版本,因为会遇到各种问题,将会浪费你的大量时间。(当然大神无视) 环境 系统:Ubuntu 18.04 LTS 显卡:GTX1080Ti CUDA:9.0 cuDNN:7.0 TensorFlow:teansorflow-gpu 1.9 Python版本:3.6 一、安装NVIDIA显卡驱动 1.删除旧的驱动。 原...

Win10离线安装.NET Framework 3.5的方法技巧(附离线安装包下载)

原文链接: https://www.windows10.pro/win10-net-framework-3-5/ 在Windows10中,当我们安装某些软件的时候会提示“你的电脑上的应用需要使用以下Windows功能:.NET Framework 3.5(包括.NET 2.0和3.0)”。如图: 首先在Win10 ISO文件上点击右键,选择“装载”。如图:...

分布式系统详解--基础知识(概论)

  一、 引言         由于网上介绍的分布式的系统讲解并没有多少,所以在这儿就希望可以写一套系统的分布式的详解,未来也结合springboot的搭建分布式系统进行详细构建。也愿意坚持写下去,写给自己也分享给大家,希望大家可以提出宝贵的意见,一同长进。哈哈。。第一篇文章,开个头。 二、分布式定义。   了解起来分布式呢,顺便也介绍一下集群,这两个概念...

华为机试 计算字符个数

题目描述 写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。 输入描述: 第一行输入一个有字母和数字以及空格组成的字符串,第二行输入一个字符。 输出描述: 输出输入字符串中含有该字符的个数。 示例1 输入 ABCDEF A 输出 1 sing System; using Syste...