ASCII码

ASCII是最常见,也是听到最多的,它总共有128个,用一个字节的低7位表示,0-31是控制字符如换行、回车删除等;32~126是打印字符,可以通过键盘输入并且能够显示出来,总共128符号(其中包括32个打印不出来的控制符号),只占用后7位,最前一位统一规定为0。

其中常用到的有:

字符 十进制
A 65
Z 90
a 97
z 122
0 48

GB2312

它的全程是《信息交换用汉字编码字符集 基本集》,它是双字节编码,总的编码范围是A1-F7,其中从A1-A9是符号区,总共包含682个字符,从B0-F7是汉字区,包含6763个汉字。

GBK

全称《汉字内码扩展规范》,是国家技术监督局为windows95所制定的新的汉字内码规范,它的出现是为了扩展GB2312,它相比较GB2312,主要是存的汉字更多总共有23940个码位,能表示21003个汉字,两者之间可以兼容。也就是说GB2312编码的汉字可以用GBK解码,不会出现乱码。
GBK就是在保存你的帖子的时候,一个汉字占用两个字节。。外国人看会出现乱码,此为我中华为自己汉字编码而形成之解决方案。

编码规则

GBK的中文编码是双字节来表示的,英文编码是用ASC||码表示的,既用单字节表示。但GBK编码表中也有英文字符的双字节表示形式。为区分中文,将其最高位都定成1。英文单字节最高位都为0。当用GBK解码时,若高字节最高位为0,则用ASC||码表解码;若高字节最高位为1,则用GBK编码表解码。总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 xx7F 一条线。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。

Unicode(统一码、万国码)

Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。目前的Unicode字符分为17组编排,0x0000 至 0x10FFFF,每组称为平面(Plane),而每平面拥有65536个码位,共1114112个。然而目前只用了少数平面。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。Unicode属于字符集,不属于编码,UTF-8、UTF-16等是针对Unicode字符集的编码。

UTF-8

UTF-8是以字节单位对Unicode编码,第0-127位字符使用1个字节来表示(单个字母、数字符号等)和ASCII编码相同,其中大部分汉字采用三个字节编码。从128号之后开始根据字符选择要使用的字节位数。因此UTF-8被称为可变长编码。
UTF8就是在保存你的帖子的时候,一个汉字占用3个字节。。但是外国人看的话不会乱码,此为西人为了解决多字节字符而形成之解决方案。

编码规则:

如果一个字节,以11开头,连续的1的个数暗示这个字符的字节数,例如110x x x x x代表它是双字节UTF-8字符的首字节

十进制 Unicode UTF-8
0-127 0x000000-0x00007F 0xxxxxxx(7位)
128-2047位 0x000080-0x0007FF 110xxxxx 10xxxxxx(11位)
2048-65535位 0x000800-0x00FFFF 1110xxxx 10xxxxxx 10xxxxxx(16位)
65536-1114111位 0x010000-0x10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx(21位)

比如“严”的Unicode是4E25,对应二进制(100111000100101),根据上表,符合第三行格式“1110xxxx 10xxxxxx 10xxxxx”从最后一位二进制开始,依次从后向前填入格式中的x,多出来的补0;严的UTF-8编码为”11100100 10111000 10100101“转为十六进制就是E4B8A5.

UTF-16

UTF-16编码以16位无符号整数为单位,使用二或四个字节为每个字符编码,其中大部分汉字采用两个字节编码。

编码规则

十进制 Unicode UTF-16
0-65535位 0x00000-0x00FFFF xxxxxxxx xxxxxxxx(16位)
65536-1114111位 0x010000-0x10FFFF 110110yy yyyyyyyy 110111xx xxxxxxxx(20位)

与UTF-8相比虽然表示的方法简单方便,有很大一部分字符用一个字节就可以表示的现在要用两个字节表示,有占有的存储空间放大一倍,会增大网络传输的流量,而且没必要这么做。

UTF-32

UTF-32编码以32位无符号整数为单位。

编码规则

十进制 UNicode UTF-32字节流
0-111411位 0x000000-0x10FFFFF xxxxxxxx xxxxxxxx xxxxxxx xxxxxxxx(32位)

UTF-32与UTF-16一样有小尾序和大尾序之别,编码前会放置FEFF或FFFE区分

字节序

字节序有两种,分别是大端(Big Endian,BE)和小端(Little Endian,LE)。Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做"零宽度非换行空格"(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。
UTF-8虽是字节顺序无关的,但仍然可以用BOM来表明其编码方式。PHP并不会忽略UTF-8的BOM,所以在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分。因此PHP文件采用UTF-8编码时可保存无BOM格式。

UTF编码 BOM
UTF-8 without BOM
UTF-8 with BOM EE BB BF
UTF-16LE FF FE
UTF-16BE FE FF
UTF-32LE FF FE 00 00
UTF-32BE 00 00 FE EE

这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》。在该书中,小人国里爆发了内战,战争起因是人们争论,吃鸡蛋时究竟是从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。为了这件事情,前后爆发了六次战争,一个皇帝送了命,另一个皇帝丢了王位。

几种编码格式的比较

对于中文字符GB2312与GBK编码规则类似,但GBK的范围更大,它能处理所有汉字字符,所以GB2312与GBK比较选择GBK。UTF-8和UTF-16都是处理Unicode编码,UTF-16编码效率最高,字符到字符相互转换更简单,进行字符串操作也更好。它适合在本地磁盘和内存之间使用,可以进行字符与子节之间快速切换如java的内存编码就是采用UTF-16编码,但不适合在网络之间传输,因为网络传输容易损坏字节流,一旦字节流损坏将很难恢复,相比而言UTF-8更适合网络传输。UTF-8在编码效率和编码安全性上做了平衡,是最理想的中文编码方式。GBK包含全部中文字符,UTF-8则包含全世界所有国家需要用到的字符。UTF-8编码的文字可以在各国各种支持UTF8字符集的浏览器上显示。比如,如果是UTF-8编码,则在外国人的英文IE上也能显示中文,而无需他们下载IE的中文语言支持包。所以,对于英文比较多的论坛 ,使用GBK则每个字符占用2个字节,而使用UTF-8英文却只占一个字节。但是如果UTF8中出现中文那就是3个字节~~具体的自己权衡。

参考资料:
https://blog.csdn.net/Hknock/article/details/75498427
https://blog.csdn.net/jkx1132/article/details/76900852
https://blog.csdn.net/qq_37859539/article/details/79857476

常见几种编码格式及比较相关推荐

  1. Post请求的两种编码格式:application/x-www-form-urlencoded和multipart/form-data

    在常见业务开发中,POST请求常常在这些地方使用:前端表单提交时.调用接口代码时和使用Postman测试接口时.我们下面来一一了解: 一.前端表单提交时 application/x-www-form- ...

  2. 常见证书的编码格式和文件类型

    一.证书标准 X.509 - 这是一种证书标准,主要定义了证书中应该包含哪些内容.其详情可以参考RFC5280,SSL使用的就是这种证书标准. 二.编码格式 PEM - Privacy Enhance ...

  3. java 常见几种发送http请求案例

    java 常见几种发送http请求案例 直接换成CloseableHttpClient还不行,需要这样使用CloseableHttpClient httpClient = HttpClientBuil ...

  4. 常见几种浏览器兼容性问题与解决方案

    常见几种浏览器兼容性问题与解决方案 参考文章: (1)常见几种浏览器兼容性问题与解决方案 (2)https://www.cnblogs.com/lmaster/p/6385035.html 备忘一下.

  5. 大型ERP等数据库系统常见几种设计

    大型ERP等数据库系统常见几种设计 1. 自增长 primary key 采用自增长 primary key主要是性能.早期的数据库系统,经常采用某种编号,比如身份证号码,公司编号等等作为数据库表的 ...

  6. Typescript常见三种函数类型

    Typescript有常见三种函数类型: 分别是普通的函数: 有可选参数的函数: 有剩余参数的函数: 普通函数 function findMan(age:number):string{return ' ...

  7. 常见三种存储方式DAS、NAS、SAN的架构及比较

    随着主机.磁盘.网络等技术的发展,数据存储的方式和架构也在一直不停改变,本文主要介绍目前主流的存储架构. 存储的分类 根据服务器类型分为: 封闭系统的存储(封闭系统主要指大型机) 开放系统的存储(开放 ...

  8. 股票的大底部形态,常见几种底部形态详解

    股票的大底部形态,常见几种底部形态详解 股票的大底部形态是什么,底部形态有在股市中担当着一个什么作用,最近发现的一个叫QR量化投资社区的不错的平台,也给了自己很多灵感.经历了最近的市场波动,心血来潮, ...

  9. 路由 OSPF常见4种网络类型MA、P2P、NBMA、P2MP、OSPF报头字段信息简介。

    4.2.1 路由 OSPF(OSPF常见4种网络类型.OSPF报头信息) 目录 OSPF常见的4种网络类型 广播类型(Broadcast 或 MA) P2P NBMA P2MP OSPF报文发送形式 ...

  10. 常见几种显示器进入工厂模式的方法

    常见几种显示器进入工厂模式的方法 ⒈ 方正显示器 ⑴方正15英寸和17英寸飞梭显示器:开机前按住飞梭键后再开机即可进入工厂模式. ⑵方正OSD显示器:开机前按住最中间那个按键后再开机就可以进入工厂模式 ...

最新文章

  1. 半世纪全球顶级学者迁移图(附视频、亿级学术信息)| 数据院科技大数据研究中心发布
  2. python列表添加元组_【Python爬虫】列表、元组、集合练习
  3. 安卓工控主板双网口有什么用途?
  4. Python2 之 print函数示例
  5. 开源开放 | 疾病科室、心血管系统疾病知识图谱发布,助力电子病历系统建设...
  6. thinkPHP 阿里云OSS 上传文件、直接下载
  7. 【源码分享】WPF漂亮界面框架实现原理分析及源码分享
  8. 用python找出所有三位数中的水仙花数_python使用循环打印所有三位数水仙花数的实例...
  9. java json 转数据_Java解析(读取)Json数据{}、[{}](转)
  10. x86 x64 arm64的区别
  11. 凯撒/摩斯/栅栏/维吉尼亚/元音密码加解密的Python实现
  12. SPSS学习笔记【二】-回归分析
  13. 了解函数式编程背后的属性:单子(Monad)
  14. 十几年稳坐“大哥”位,搞Java的程序员就是这么“牛x”!
  15. 牛逼的人很早就开始牛逼了
  16. 与 Hadoop 对比,如何看待 Spark 技术
  17. excel单元格内容拆分_拆分单元格内容,表哥表妹不要哭
  18. 58 mysql 军规_58到家MySQL军规升级版(转)
  19. css翘边阴影图片,【CSS】翘边阴影
  20. 高德地图API - 根据经纬度获取周边建筑地标

热门文章

  1. wmf和emf格式的图片有什么区别? JPG图片如何转换WMF文件?
  2. PetaLinux学习笔记 1
  3. 3dmax打开错误html,Windows安装3dmax软件失败提示错误三种解决办法
  4. 【小程序源码】花体字转换器支持多种花样字体不同风格
  5. 8种Python文本处理工具集
  6. linux最好的mp4软件,【良心推荐】5款好用的MP4视频编辑器
  7. MySQL命令行登录数据库
  8. java泊松分布随机数_泊松分布随机数
  9. hl2240d硒鼓清零方法
  10. python 安装whl文件