这篇文章其实早就想写了,准确的说应该是总结一下!之前看过很多篇关于编码的文章,也遇到过一些编码的问题,这篇文章就聊一聊!

ASCII

这种编码应该是我们最早接触的,也是最简单的!这种编码方式主要是为英文世界服务的,毕竟计算机是美国人发明的,他们肯定首先服务于自己的文字!

ascii一共囊括128个字符的表示,包括26个大小写英文字母,这对于英文世界基本足够了,

demo1

一个字节(8位二进制)就可以搞定,而且只用了7位,还有富余!但是这个世界不只有老美,还有很多其他国家需要使用计算机,所以就算把一个字节的8位都用上,也不够表示世界上那么多的字符!

Unicode

如果每个国家都搞一套自己的字符集,那对于计算机来说简直就是灾难!计算机就好比一个人,让其掌握这世界上的所有语言那是非常痛苦的,但是如果世人都说汉语,那就很happy了,只需要说一种语言就可以了!

基于这种情况,美国人就搞出了一套标准的字符集,就是unicode,记录了世界上大部分字符与数字之间的映射,有点类似于新华字典!

unicode是字符集,解决了每个字符对应的数字,数字一般都是二进制表示,当把一段文章翻译成数字,可能是这样的:1101010100101010101110011110011000.......

如果没有规则,这一段数字就是天书,完全不知道如何分割这些二进制数字去对应字符,所以还需要指定编码规则,在编码后还能容易解码!

码点codePoint:字符在unicode中对应的数字

utf-8

utf-8就是Unicode字符集编码的一种实现方式,规则如下:

demo2

demo2中左侧对应码点的区间,右侧对应编码规则,也可以看出来utf8编码方式是变长的,由一个字节到四个字节不等!

编码规则:

  • 通过码点在demo2左侧找到自己的区间,了解到需要n个字节
  • 第一个字节高位由n个1加一个0组成,剩下的字节高位都是10
  • 把码点转化成二进制由低位到高位填充进xxxxxx中,填不满的用0补充

知道了规则,其实就会觉得utf8编码非常的简单!

utf-16

utf-16是Unicode编码的另外一种实现方式,在说utf-16编码规则之前,先了解几个概念!

平面:unicode这本字典在定义字符到数字映射的时候,是分区定义的,类似于居民区的小区,将不同的字符划分到不同的区域,每个区域有65536个字符(2^16),这样一个区域称为平面,这样的平面有17个(2^5)

基本平面:最早发布的就是最开始的这个平面,简称BMP,范围U+0000-U+FFFF,两个字节表示

辅助平面:剩下的16个平面,简称SMP,范围U+010000-U+10FFFF,四个字节表示

如果码点落在基本平面,码点直接转化成16位二进制(两个字节),不足时高位补零!

如果码点落在辅助平面,稍微麻烦些!

在基本平面的区间,从 U+D800 到 U+DFFF 是一个空段,即这些码点不对应任何字符!

辅助平面一共2^20字符,需要20位二进制表示,此时将此20位分成两段,前10位映射在 U+D800 ~ U+DBFF,称为高位(H),后10位映射在 U+DC00 ~ U+DFFF,称为低位(L),总共四个字节。

unicode给出了具体的映射规则:

H = Math.floor((c-0x10000) / 0x400)+0xD800

L = (c - 0x10000) % 0x400 + 0xDC00

c代表码点

demo3

demo3中对应的utf-16编码结果是0xd842 0xdfb7

稍微算了一下:高位有2^10种可能,低位也是2^10种可能,两者一起正好能表示2^20种可能,这是巧合吗,还是有意而为之?

utf-32

utf-8编码由1个到四个字节表示,utf-16编码由2个或者4个字节表示!

utf-32编码方式比较干脆,统一由四个字节表示,这种方式很浪费空间,不推荐使用!

总结

这篇文章总结了一下unicode字符集三种实现方式utf8、utf16和utf32,因为平时经常遇到编码的问题,所以还是总结一下!

喜欢我的文章就关注我吧,有问题可以发表评论,我们一起学习,共同成长!

字符集_一文搞清楚unicode字符集的三种实现方式相关推荐

  1. 带你一文搞懂VMware Workstation的三种网络模式

    前言: 其实VMware Workstation的三种网络模式我学的不止一遍,但每次学习自己理解的都是朦胧的概念,说自己学会了吧,一些实质性的概念转头就忘记,一点也想不起来.说自己不会吧,但是每次学习 ...

  2. 创建函数查找上级_一文秒懂JavaScript中对象的7种创建方式

    1.工厂模式 javascript 代码 工厂模式:能根据接受的参数来创建出一个person对象.也可以无数次的调用这个函数,每次都会返回一个包含3个属性和1个方法的对象. 工厂模式虽然解决了创建多个 ...

  3. 什么叫反光识别读数识别_南昌公积金提取有大变化!增加三种登录方式

    今日,记者从南昌公积金管理中心获悉,"南昌公积金"微信公众号再次进行优化.南昌公积金缴存职工可通过反光识别登录身份认证.读数识别登录身份认证和账户密码登录三种方式进行登录. 升级后 ...

  4. 一文搞懂Oracle字符集

    Oracle字符集 1. 字符集定义 2. 常见字符集 3. Oracle字符集 3.1 Oracle Server端字符集 3.2 Oracle Client端字符集 3.3 Oralce导入/导出 ...

  5. 2021-11-06一文看懂融合定位技术6种打开方式,深圳核芯物联国产蓝牙aoa融合定位生态合能伙伴方案展示 核芯物联岳毅恒

    一文看懂融合定位技术6种打开方式,深圳核芯物联国产蓝牙aoa融合定位生态合能伙伴方案展示 原创 市大妈 物联传媒 今天 方案素材:属于核芯物联国产蓝牙aoa融合定位生态伙伴所有 本文来源:物联传媒 本 ...

  6. .net mysql和php mysql数据库连接_浅谈PHP连接MySQL数据库的三种方式

    本篇文章给大家介绍一下PHP连接MySQL数据库的三种方式(mysql.mysqli.pdo),结合实例形式分析了PHP基于mysql.mysqli.pdo三种方式连接MySQL数据库的相关操作技巧与 ...

  7. 计算机文件保存方式,Word文档的三种保存方式

    word中有多种保存文档的方式.可保存当前处理的活动文档 (活动文档:正在处理的文档.在 Microsoft word 中键入的文本或插入的图形将出现在活动文档中.活动文档的标题栏是突出显示的.),无 ...

  8. libIconv库实现中文中字符串与GBK、Unicode、UTF-8三种编码互转

    libIconv库实现GBK.Unicode.UTF-8三种编码互转比window api更为简单,而且libIconv库跨平台. IibIconv库在windows下的编译参照windows下使用V ...

  9. php带参数单元测试_一文搞定单元测试核心概念

    基础概念 单元测试(unittesting),是指对软件中的最小可测试单元进行检查和验证,这里的最小可测试单元通常是指函数或者类.单元测试是即所谓的白盒测试,一般由开发人员负责测试,因为开发人员知道被 ...

  10. python语言语句快的标记是什么_一文搞懂Python程序语句

    原标题:一文搞懂Python程序语句 程序流 Python 程序中常用的基本数据类型,包括: 内置的数值数据类型 Tuple 容器类型 String 容器类型 List 容器类型 自然的顺序是从页面或 ...

最新文章

  1. python construct_python入门第一步
  2. 为什么C++(感谢waterwalk翻译)
  3. 艾特某人代码实现_为何敲代码,学好数学很重要?
  4. 释放C盘空间27招具体优化技巧
  5. nginx一 之负载均衡介绍
  6. LAMP搭建之三:php编译安装
  7. Codeforces Round #757 (Div. 2)
  8. 选择在何处重构(下)
  9. Lync Server多SIP域环境和简单URL地址部署
  10. [CareerCup] 7.7 The Number with Only Prime Factors 只有质数因子的数字
  11. weblogic设置classpath、debug端口和log目录
  12. c语言爬楼梯不用递归,[leetcode]爬楼梯的递归和非递归方法
  13. 玩转流量,天下无锅——IT运维人员的九阳神功(上)| 技术分享
  14. 【go1.18】error obtaining VCS status: exit status
  15. (三)JVM成神路之全面详解执行引擎子系统与JIT即时编译原理
  16. RISC-V Assembly Programmer's Manual
  17. 机器学习西瓜书第一章总结
  18. 【2017/07】实验记录——SSSP
  19. 实战-H3C交换机之Web界面
  20. python培训视频课程学习路径

热门文章

  1. 小峰servlet/jsp(4)EL表达式
  2. 面向对象的三大特性和五大原则
  3. 【Git/Github学习笔记】Git常用命令(推送到远程)
  4. C#中RestoreDirectory属性
  5. 智能优化算法:动物迁徙优化算法-附代码
  6. 《剑指offer》面试题30——最小的k 个数
  7. Python学习总结(5)——字符串
  8. 【ArcGIS操作】2 高级编辑篇
  9. IDL实现高分一号数据辐射定标TASK(二)
  10. 计算机网络综合实践任务书,计算机网络综合实任务书2012-11.doc