架构师必须掌握的各种编码:ASCII、ISO-8859-1、GB2312

转载自 架构师必须掌握的各种编码:ASCII、ISO-8859-1、GB2312

编码在我们日常开发过程中经常有遇到,常见的编码格式有ASCII、ISO-8859-1、GB2312、GBK、GB18030、UNICODE、UTF-8、UTF-16等,其中GB2312、GBK、GB18030、UTF-8、UTF-16都可以用来表示中文,那么哪种存储中文会比较合适呢,下面会对这几种编码一一介绍便会有结论。


为什么有编码


我们知道计算机中最小的存储单位是字节(byte),一个字节所能表示的字符数又有限,1byte=8bit,一个字节最多也只能表示255个字符,而世界上的语种又多,都有各种不同的字符,无法用一个byte表示,所以java中的char表示字符就是来解决这种编码问题的,一个char占两个字节,所以从char到最小单位byte之间必须经过编码。



常用编码


ASCII


全称为American Standard Code for Information Interchange,美国信息交换标准代码,这是世界上最通用的单字节编码系统,主要用来显示现代英语及其他西欧语言。


ASCII码用7位表示,只能表示128个字符,0~31表示控制字符如回车、退格、删除等;32~126表示打印字符即可以通过键盘输入并且能显示出来的字符,

其中48~57为0到9十个阿拉伯数字,65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等,具体可以参考ASCII标准表。


ISO-8859-1


既然ASCII只能表示128个字符,显示是不能完全表示完的,所以ISO-8859-1扩展了ASCII编码,在ASCII编码之上又增加了西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号,它是向下兼容ASCII编码的。


ISO-8859-1也是单字节编码,但它是一个8位的容器,它能表示256个字符。


GB2312


全称为信息交换用汉字编码字符集,是中国于1980年发布,主要用于计算机系统中的汉字处理。GB2312主要收录了6763个汉字、682个符号。


GB2312覆盖了汉字的大部分使用率,但不能处理像古汉语等特殊的罕用字,所以后来出现了像GBK、GB18030这种编码。


GBK


GBK,全称为Chinese Internal Code Specification,即汉字内码扩展规范,于1995年制定。它主要是扩展了GB2312,在它的基础上又加了更多的汉字,它一共收录了21003个汉字。


GBK是向下兼容GB2312编码的,也就是说GB2312编码的汉字可以用GBK正常解码不会出现乱码,但用GBK编码的汉字用GB2312解码就不一定了。


GB18030


GB18030全称汉字内码扩展规范,是现在最新的内码字集于2000年发布,并于2001年强制执行,包含了中国大部分少数民族的语言字符,收录汉字数超过70000余个。


它主要采用单字节、双字节、四字节对字符编码,它是向下兼容GB2312和GBK的,虽然是我国的强制使用标准,但在实际生产中很少用到,用得最多的反而是GBK和GB2312。



UNICODE


为了自己的语言能在计算机中正常显示,每个国家和地区都有各自的编码,所以编码多了谁也不认识对方的编码,这时候ISO组织就提出了一种新的编码叫UNICODE编码让全球的文化、字符、符号都能支持。UNICODE在制定时计算机容量已不是问题,所以设计成了固定两个字节,所有的字符都用16位表示,包括之前只占8位的英文字符等,所以会造成空间的浪费,UNICODE在很长的一段时间内都没有得到推广应用。


UTF-16


UTF-16是UNICODE的具体实现,16即16位,UTF-16即是这个来由,定义了UNICODE字符在计算机中的存储方式,UTF-16同样使用了两个字节来表示任何字符,这样使得操作字符串非常高效,这也是java把UTF-16作为字符在内存中存储的格式的重要原因。


UTF-16适合在磁盘与内存之间使用,字符和字节的相互转换会更加简单和高效,但不适合在网络上传输,因为网络传输可能会损坏字节流。


UTF-8


虽然UTF-16很高效,但也是UNICODE最大的坏处,使得所有单字节字符一定要占两个字节,存储空间放大了一倍,这明显消耗了资源,不符合现在互联网高速发展的现状。所以有了UTF-8,它是UNICODE的一种可变长度字符编码的实现,它可以使用1~6个定长字节来编码UNICODE字符。


UTF-8对ASCII字符使用单字节存储,单个字符损坏也不会影响后面的字符,所以UTF-8非常适合在网络上面传统,也是现在使用最广泛的编码之一。


如果要表示中文,UTF-8编码效率要大于GBK,小于UTF-16,所以它也是除了GBK之外最理想的编码方式。


编码在我们日常开发过程中经常有遇到,常见的编码格式有ASCII、ISO-8859-1、GB2312、GBK、GB18030、UNICODE、UTF-8、UTF-16等,其中GB2312、GBK、GB18030、UTF-8、UTF-16都可以用来表示中文,那么哪种存储中文会比较合适呢,下面会对这几种编码一一介绍便会有结论。


为什么有编码


我们知道计算机中最小的存储单位是字节(byte),一个字节所能表示的字符数又有限,1byte=8bit,一个字节最多也只能表示255个字符,而世界上的语种又多,都有各种不同的字符,无法用一个byte表示,所以java中的char表示字符就是来解决这种编码问题的,一个char占两个字节,所以从char到最小单位byte之间必须经过编码。



常用编码


ASCII


全称为American Standard Code for Information Interchange,美国信息交换标准代码,这是世界上最通用的单字节编码系统,主要用来显示现代英语及其他西欧语言。


ASCII码用7位表示,只能表示128个字符,0~31表示控制字符如回车、退格、删除等;32~126表示打印字符即可以通过键盘输入并且能显示出来的字符,

其中48~57为0到9十个阿拉伯数字,65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等,具体可以参考ASCII标准表。


ISO-8859-1


既然ASCII只能表示128个字符,显示是不能完全表示完的,所以ISO-8859-1扩展了ASCII编码,在ASCII编码之上又增加了西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号,它是向下兼容ASCII编码的。


ISO-8859-1也是单字节编码,但它是一个8位的容器,它能表示256个字符。


GB2312


全称为信息交换用汉字编码字符集,是中国于1980年发布,主要用于计算机系统中的汉字处理。GB2312主要收录了6763个汉字、682个符号。


GB2312覆盖了汉字的大部分使用率,但不能处理像古汉语等特殊的罕用字,所以后来出现了像GBK、GB18030这种编码。


GBK


GBK,全称为Chinese Internal Code Specification,即汉字内码扩展规范,于1995年制定。它主要是扩展了GB2312,在它的基础上又加了更多的汉字,它一共收录了21003个汉字。


GBK是向下兼容GB2312编码的,也就是说GB2312编码的汉字可以用GBK正常解码不会出现乱码,但用GBK编码的汉字用GB2312解码就不一定了。


GB18030


GB18030全称汉字内码扩展规范,是现在最新的内码字集于2000年发布,并于2001年强制执行,包含了中国大部分少数民族的语言字符,收录汉字数超过70000余个。


它主要采用单字节、双字节、四字节对字符编码,它是向下兼容GB2312和GBK的,虽然是我国的强制使用标准,但在实际生产中很少用到,用得最多的反而是GBK和GB2312。



UNICODE


为了自己的语言能在计算机中正常显示,每个国家和地区都有各自的编码,所以编码多了谁也不认识对方的编码,这时候ISO组织就提出了一种新的编码叫UNICODE编码让全球的文化、字符、符号都能支持。UNICODE在制定时计算机容量已不是问题,所以设计成了固定两个字节,所有的字符都用16位表示,包括之前只占8位的英文字符等,所以会造成空间的浪费,UNICODE在很长的一段时间内都没有得到推广应用。


UTF-16


UTF-16是UNICODE的具体实现,16即16位,UTF-16即是这个来由,定义了UNICODE字符在计算机中的存储方式,UTF-16同样使用了两个字节来表示任何字符,这样使得操作字符串非常高效,这也是java把UTF-16作为字符在内存中存储的格式的重要原因。


UTF-16适合在磁盘与内存之间使用,字符和字节的相互转换会更加简单和高效,但不适合在网络上传输,因为网络传输可能会损坏字节流。


UTF-8


虽然UTF-16很高效,但也是UNICODE最大的坏处,使得所有单字节字符一定要占两个字节,存储空间放大了一倍,这明显消耗了资源,不符合现在互联网高速发展的现状。所以有了UTF-8,它是UNICODE的一种可变长度字符编码的实现,它可以使用1~6个定长字节来编码UNICODE字符。


UTF-8对ASCII字符使用单字节存储,单个字符损坏也不会影响后面的字符,所以UTF-8非常适合在网络上面传统,也是现在使用最广泛的编码之一。


如果要表示中文,UTF-8编码效率要大于GBK,小于UTF-16,所以它也是除了GBK之外最理想的编码方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 使用 el-image图片无法显示

问题&#xff1a;在vue 项目中使用 el-image 后&#xff0c;在图片路径无误的情况下显示图片加载失败 <el-carousel trigger"click" :height"carouselHeight"><el-image src"images/top1.jpg" fit"fill" style"height:…

java本地监听zk服务器节点【动态上下线】

【README】 java本地访问 zk cluster&#xff0c; refer 2 https://blog.csdn.net/PacosonSWJTU/article/details/111404364 【1】 客户端监听 zk节点变化 1&#xff09; zk客户端代码——http访问的客户端代码&#xff08;请求zk获取 http服务器的上下线信息&#xff09;…

面象对象设计6大原则之一:单一职责原则

转载自 面象对象设计6大原则之一&#xff1a;单一职责原则单一职责原则&#xff08;SRP&#xff09;&#xff0c;The Single Responsibility Principle定义一个类的修改只能有一个被修改的原因。通俗地讲&#xff0c;就是一个类只能负责一个职责&#xff0c;修改一个类不能影响…

vue 实现 js css html分离

方法一 分别创建 index.js, index.css index.js: export default {data:function(){return {//...};},methods:{//...} }index.vue 代码 <template>.... </template><script> //index.js 的相对路径 import index from "./index.js";// 名字可…

基于centos8搭建zookeeper集群

【README】 本文基于centos8 搭建 1&#xff0c;其他linux版本&#xff0c;命令可能不同&#xff1b; 2&#xff0c;集群包括3个节点&#xff0c;如下&#xff08;因为采用NAT模型进行网络连接&#xff0c;需要让windows和linux机器在同一个网段&#xff09;&#xff1a; ce…

面象对象设计6大原则之二:开放封闭原则

转载自 面象对象设计6大原则之二&#xff1a;开放封闭原则开放封闭原则&#xff08;OCP&#xff09;&#xff0c;The Open Closed Principle定义一个软件的实体&#xff0c;包括类、方法、模块、应该对扩展开放&#xff0c;对修改关闭。也就是说一个软件的实体应该通过扩展的方…

Java 泛型实现方法 — 擦拭法

所谓擦拭法是指&#xff0c;虚拟机对泛型其实一无所知&#xff0c;所有的工作都是编译器做的。 例如&#xff0c;我们编写了一个泛型类Pair&#xff0c;这是编译器看到的代码&#xff1a; public class Pair<T> {private T first;private T last;public Pair(T first, T…

shell脚本启动kafka集群的多台节点

【README】 由于集群有多台机器&#xff0c;启动kafka &#xff0c;查看其状态&#xff0c;都需要每台机器去执行命令&#xff0c; 可以写个脚本基于ssh免密登录批量执行&#xff1b; 【1】启动kafak (kk.sh) #!/bin/bash case $1 in "start"){for i in centos201…

面象对象设计6大原则之三:里氏替换原则

转载自 面象对象设计6大原则之三&#xff1a;里氏替换原则里氏替换原则&#xff08;LSP&#xff09;&#xff0c;The Liskov Substitution Principle定义所有引用基类的地方必须能透明地引用其子类的对象&#xff0c;即子类可以拓展父类的功能&#xff0c;但不能修改父类已有的…

kafka命令行操作

【README】 kafka集群 -- kafka集群 3台机器 centos201 192.168.163.201 centos202 192.168.163.202 centos203 192.168.163.203【1】主题topic 操作命令 序号 命令 1 kafka-topics.sh -- create 新增 2 kafka-topics.sh -- list 查看列表 3 kafka-topics.sh -- d…

面象对象设计6大原则之四:接口隔离原则

转载自 面象对象设计6大原则之四&#xff1a;接口隔离原则接口隔离原则&#xff08;ISP&#xff09;&#xff0c;The Interface Segregation Principle定义客户端不需要强迫依赖那些它们不需要的接口。类与接口的依赖应该建议在最小的接口上&#xff0c;也就是说接口应该最小化…

Spring 拦截器和过滤器中自动注入为 null 的原因及解决方案

起因 开发过程中在过滤器&#xff08;filter&#xff09;中注入Bean出现空指针异常&#xff0c;通过查找资料了解空指针的原因&#xff0c;特此记录。 问题分析 由于其他bean在service&#xff0c;controller层注入一点问题也没有&#xff0c;开始根本没意识到Bean无法注入是…

kafka命令行生产者消费者测试

【README】 基于命令行开启生产者&#xff0c;消费者线程&#xff0c;测试kafka的消费转发功能&#xff1b; 【1】生产者与消费者 生产者201 [rootcentos201 logs]# kafka-console-producer.sh --topic first --broker-list centos201:9092 >hello-world >sichuan-c…

面象对象设计6大原则之五:依赖倒置原则

转载自 面象对象设计6大原则之五&#xff1a;依赖倒置原则依赖倒置原则&#xff08;DIP&#xff09;&#xff0c;The Dependency Inversion Principle定义1、高层模块不应该依赖低层模块&#xff0c;两都应该依赖于抽象。2、抽象不依赖于具体细节。3、具体细节应该依赖于抽象。…

实现简单的注解型MVC框架 —— 低配SpringMVC

文章目录目标最终效果展示基本步骤1. 解析控制器类&#xff1a;2. 解析处理函数&#xff1a;3. 解析处理函数变量名&#xff1a;4. 监听TCP连接&#xff1a;5. 实现路由函数&#xff1a;知识点总结目标 与SpringMvc定义Controller类似效果 最终效果展示 主类 package org.e…

转:聊聊开发中幂等性问题(*)

【README】 这是一篇非常棒的&#xff0c; 讲解幂等性问题的post&#xff0c; 感谢原文作者&#xff1b; 转自&#xff1a; https://juejin.cn/post/6844903815552958477 幂等 (idempotence) 的概念 幂等的数学概念 幂等是源于一种数学概念。其主要有两个定义 如果在一元运…

面象对象设计6大原则之六:迪米特原则

转载自 面象对象设计6大原则之六&#xff1a;迪米特原则迪米特原则&#xff08;LOD&#xff09;&#xff0c;The Law Of Demeter&#xff0c;也称为最少知识原则定义一个对象应该对其他对象有最少的了解。也就是说一个类耦合和调用一个类应该知道的最少&#xff0c;它只关心被耦…

转-Apache kafka 工作原理介绍

转自&#xff1a; https://developer.ibm.com/zh/articles/os-cn-kafka/ 消息队列 消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上, 队列存储消息直到它们被应用程序读走。通过消息队列&#xff0c;应用程序可独立地执行–它们不需要知道彼此的…

Java内存区域(运行时数据区域)和内存模型(JMM)

原文作者&#xff1a;czwbig 原文&#xff1a;https://www.cnblogs.com/czwbig/p/11127124.html Java 内存区域和内存模型是不一样的东西&#xff0c;内存区域是指 Jvm 运行时将数据分区域存储&#xff0c;强调对内存空间的划分。 而内存模型&#xff08;Java Memory Model&am…

kafka 学习 非常详细的经典教程

转自&#xff1a; https://blog.csdn.net/tangdong3415/article/details/53432166 一、基本概念 介绍 Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能&#xff0c;但具有自己独特的设计。 这个独特的设计是什么样的呢&#xff1f; 首先让我们看…