【Python基础】字符编码ASCII-GBK-Unicode-UTF-8之间的关系
字符编码
由于计算机只识别0和1,为了使计算机能够支持文字和字母等符号,方便实用操作计算机
于是字符编码应运而生,旨在解决符号和人类语言与计算机0和1建立起一种对应关系
据说不理解字符编码可能是程序员一辈子的遗憾,拿出来单独总结一下发展史:ASCII-->Unicode-->UTF-8ASCII是最早期应用在美国方面的,建立了A-z和一批特殊符号,一共128种字符与二进制之间的对应关系比如:小写字母w 十进制135 转换为二进制 10000111空格 0 0如果表示[空格][空格]w 二进制就是 0010000111 #前面的两个0代表两个空格就有个问题就是二进制本来就一串繁琐空格和w怎么话分界线来界定每个字符的界限呢,以致后来就统一了一下所有字符都占8位,每次以8位界限读取如果表示[空格][空格]w 二进制就是 00000000 00000000 10000111 ##这里每1或0占1bit(比特)于是乎就有了今天的ASCII码每个字符占1bytes(字节)换算关系:bit 位,计算机中最小的表示单位,每个字符转二进制后的0和18bit = 1bytes(B) 字节,最小的存储单位,1bytes缩写为1B1KB = 1024B1MB = 1024KB1GB = 1024MB...优点:建立了对应关系缺点:并不适用其他国家语言,其他语言解析会出现乱码,比如中文,韩文等等...GBK 为了同时满足中文和英文(ASCII),中国人定制了GBK,也就是说这个时候中文和英文使用GBK没问题,如果写日文其他语言就会产生乱码GBK:2Bytes代表一个中文字符,1Bytes表示一个英文字符其他国家满足自己,各个国家纷纷定制了自己的编码日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里Unicode 旨在解决其他国家语言共存的问题而应运而生,俗称万国编码,仅建立在内存中由于ASCII 用的是 8位也就是说 最多支持 11111111 转换成十进制255个编码中文恐怕就远远不够了,中文有几万个,后来对于中文就在原来1字节(11111111)基础又加了1个字节ASCII 英文 11111111 最高支持255个字符 占用1字节Unicode 支持中文 11111111 11111111 100W+ 占用2-4字节Unicode为了同时兼容8位的ASCII,在原来ASCII的8位基础上统一添加00000000实现了 2个bytes之所以说unicode是定长是因为所有的字符都是占用2bytes这就是unicode(定长), 统一用2Bytes代表一个字符, 虽然2**16-1=65535,但unicode却可以存放100w+个字符,因为unicode存放了与其他编码的映射关系,准确地说unicode并不是一种严格意义上的字符编码表UTF-8 很明显对于通篇都是英文的文本来说,unicode的式无疑是多了一倍的存储空间(二进制最终都是以电或者磁的方式存储到存储介质中的)于是产生了UTF-8(可变长,全称Unicode Transformation Format),对英文字符只用1Bytes表示,对中文字符用3Bytes,对其他生僻字用更多的Bytes去存。于是现在大家也都在推行UTF-8的原因之一整个发展历程:ASCII --> GBK --> Unicode --> UTF-8
使用过程:基于目前的现状,内存中的编码固定就是unicode,我们唯一可变的就是硬盘的上对应的字符编码。此时你可能会觉得,那如果我们以后开发软时统一都用unicode编码,那么不就都统一了吗,关于统一这一点你的思路是没错的,但我们不可会使用unicode编码来编写程序的文件,因为在通篇都是英文的情况下,耗费的空间几乎会多出一倍,这样在软件读入内存或写入磁盘时,都会徒增IO次数,从而降低程序的执行效率。因而我们以后在编写程序的文件时应该统一使用一个更为精准的字符编码utf-8(用1Bytes存英文,3Bytes存中文),再次强调,内存中的编码固定使用unicode。1、在存入磁盘时,需要将unicode转成一种更为精准的格式,utf-8:全称Unicode Transformation Format,将数据量控制到最精简2、在读入内存时,需要将utf-8转成unicode所以我们需要明确:内存中用unicode是为了兼容万国软件,即便是硬盘中有各国编码编写的软件,unicode也有相对应的映射关系,但在现在的开发中,程序员普遍使用utf-8编码了,估计在将来的某一天等所有老的软件都淘汰掉了情况下,就可以变成:内存utf-8<->硬盘utf-8的形式了。
参考:http://www.cnblogs.com/linhaifeng/articles/5950339.html
更多图文并茂请点超链接
转载于:https://blog.51cto.com/swiki/2129947
【Python基础】字符编码ASCII-GBK-Unicode-UTF-8之间的关系相关推荐
- 字符编码ASCII、Unicode 、UTF-8 及实例汉字与Unicode码的相互转化
字符编码ASCII.Unicode .UTF-8 及实例汉字与Unicode码的相互转化 ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit)有0和1两种状态, ...
- 前端需要搞懂的字符编码ASCII、Unicode、UTF8、UTF16等
字符集和字符编码 字符集就是字符的集合,如常见的 ASCII字符集,GB2312字符集,Unicode字符集等.这些不同字符集之间最大的区别是所包含的字符数量的不同. 字符编码则代表字符集的实际编码规 ...
- python基础|字符编码
任何一个程序想要运行,必须先有硬盘加载到内存,然后由cpu去内存取只执行.运行着的应用程序的数据,必须在内存运行.python运行文件的三步,首先把python文件解释器读取到内存上,然后应用程序代码 ...
- python中输出变量对应值的字符_第2章 Python基础-字符编码数据类型 字符编码字符串 练习题...
1.简述位.字节的关系 位(bit)是计算机中最小的表示单元,数据传输是以"位"为单位的,1bit缩写为1b 字节(Byte)是计算机中最小的存储单位,1Byte缩写为1B 8bi ...
- python解析字符编码中的Unicode和UTF-8
文章目录 一.ASCII码 二.非ASCII编码 三.Unicode 四.Unicode的问题 五.UTF-8 六.字符串前面加u,r,b的含义 七 .Python中对各种编码的处理 八.生成json ...
- java ascii 编码方式,Java 字符编码 ASCII、Unicode和UTF-8
1 ASCII码 统一规定英语字符与二进制位之间的关系.ASCII码一共规定了128个字符的编码.例如,空格"SPACE"是32(二进制00100000),大写字母A是65(二进制 ...
- 常见的三种字符编码ASCII、Unicode、UTF-8
发展史 ASCII 码 -> Unicode -> UTF-8 背景 计算机内部,信息都已二进制储存,每一个二进制位有 0 或 1 两种状态,采用 8 个 二进制位 (bit) 作为一个字 ...
- 字符编码(ASCII,Unicode和UTF-8) 和 大小端
参考: https://www.cnblogs.com/skywang12345/p/3360348.html 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每 ...
- 彻底搞清楚ASCII,Unicode和UTF-8之间的关系
转载自:https://blog.csdn.net/Deft_MKJing/article/details/79460485 前言 平时喜欢写东西,看博客,一直对编码有些懵,今天下午也不知道看到了什么 ...
- 12道Python基础字符编码数据类型练习题
1.转换 将字符串s = "alex"转换成列表 s = "alex" s_list = list(s) print(s_list) 将字符串s = " ...
最新文章
- Oracle技术之和分区表相关的一点总结(三)
- 多线程-010-后台线程
- ​最新综述!基于图神经网络的关系抽取技术进展
- 推荐一个国外SaaS产品-Olark
- 为iptables增加layer7补丁(Linux2.6.25内核
- frameset标签设计页面
- iOS学习笔记——多控制器管理
- 战神CPU计算机硬件组装
- VMP学习笔记之壳基础(一)
- 软件测试接口测试测试用例模板
- MySQL春节收支表怎么建立_怎样才能建一个收支表格?
- OCR文字识别【前端渲染,后端进行逻辑处理】
- 团灭Leetcode打家劫舍问题
- 让电脑自动开机、关机以及取消开机密码
- 小程序打开速度慢是服务器原因吗,网页打开速度慢的原因以及解决方法
- 网站规划通识:原型图绘制的一些注意事项
- RealView MDK开发工具
- linux无法安装at命令,在Ubuntu/Debian/CentOS/Fedora下安装At及各种At命令的用法
- 史上最完美的Android沉浸式状态导航栏攻略
- 8万条数据告诉你:跟着大股东和高管买他家股票,能赚钱吗?【邢不行|量化小讲堂系列60-实战篇】
热门文章
- html缓存特效代码,HTML特效代码
- ubuntu python3.8安装pip_ubuntu16.04纯净版-安装Python3.8.1/升级pip
- python在通信中的应用_基于Redis的进程间通信——在C++里使用python的深度学习模型...
- linux io100的原因_Linux学习笔记(九)软件包管理
- jQuery Mobile 快速入门
- 做好平面设计,你要知道的几个创造性思维?
- 计算机关闭显示器不睡眠断网吗,笔记本关闭显示器会断网吗
- android控件ems,Android登录等待效果
- include详解 shell_Linux 系统结构详解,看这一篇就够了
- 列举ospf的5种报文类型_这5种“专升本”你都知道吗?那个含金量更高呢?报考如何选择?...