字符集_一文搞清楚unicode字符集的三种实现方式
这篇文章其实早就想写了,准确的说应该是总结一下!之前看过很多篇关于编码的文章,也遇到过一些编码的问题,这篇文章就聊一聊!
ASCII
这种编码应该是我们最早接触的,也是最简单的!这种编码方式主要是为英文世界服务的,毕竟计算机是美国人发明的,他们肯定首先服务于自己的文字!
ascii一共囊括128个字符的表示,包括26个大小写英文字母,这对于英文世界基本足够了,
![](/assets/blank.gif)
demo1
一个字节(8位二进制)就可以搞定,而且只用了7位,还有富余!但是这个世界不只有老美,还有很多其他国家需要使用计算机,所以就算把一个字节的8位都用上,也不够表示世界上那么多的字符!
Unicode
如果每个国家都搞一套自己的字符集,那对于计算机来说简直就是灾难!计算机就好比一个人,让其掌握这世界上的所有语言那是非常痛苦的,但是如果世人都说汉语,那就很happy了,只需要说一种语言就可以了!
基于这种情况,美国人就搞出了一套标准的字符集,就是unicode,记录了世界上大部分字符与数字之间的映射,有点类似于新华字典!
unicode是字符集,解决了每个字符对应的数字,数字一般都是二进制表示,当把一段文章翻译成数字,可能是这样的:1101010100101010101110011110011000.......
如果没有规则,这一段数字就是天书,完全不知道如何分割这些二进制数字去对应字符,所以还需要指定编码规则,在编码后还能容易解码!
码点codePoint:字符在unicode中对应的数字
utf-8
utf-8就是Unicode字符集编码的一种实现方式,规则如下:
![](/assets/blank.gif)
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代表码点
![](/assets/blank.gif)
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字符集的三种实现方式相关推荐
- 带你一文搞懂VMware Workstation的三种网络模式
前言: 其实VMware Workstation的三种网络模式我学的不止一遍,但每次学习自己理解的都是朦胧的概念,说自己学会了吧,一些实质性的概念转头就忘记,一点也想不起来.说自己不会吧,但是每次学习 ...
- 创建函数查找上级_一文秒懂JavaScript中对象的7种创建方式
1.工厂模式 javascript 代码 工厂模式:能根据接受的参数来创建出一个person对象.也可以无数次的调用这个函数,每次都会返回一个包含3个属性和1个方法的对象. 工厂模式虽然解决了创建多个 ...
- 什么叫反光识别读数识别_南昌公积金提取有大变化!增加三种登录方式
今日,记者从南昌公积金管理中心获悉,"南昌公积金"微信公众号再次进行优化.南昌公积金缴存职工可通过反光识别登录身份认证.读数识别登录身份认证和账户密码登录三种方式进行登录. 升级后 ...
- 一文搞懂Oracle字符集
Oracle字符集 1. 字符集定义 2. 常见字符集 3. Oracle字符集 3.1 Oracle Server端字符集 3.2 Oracle Client端字符集 3.3 Oralce导入/导出 ...
- 2021-11-06一文看懂融合定位技术6种打开方式,深圳核芯物联国产蓝牙aoa融合定位生态合能伙伴方案展示 核芯物联岳毅恒
一文看懂融合定位技术6种打开方式,深圳核芯物联国产蓝牙aoa融合定位生态合能伙伴方案展示 原创 市大妈 物联传媒 今天 方案素材:属于核芯物联国产蓝牙aoa融合定位生态伙伴所有 本文来源:物联传媒 本 ...
- .net mysql和php mysql数据库连接_浅谈PHP连接MySQL数据库的三种方式
本篇文章给大家介绍一下PHP连接MySQL数据库的三种方式(mysql.mysqli.pdo),结合实例形式分析了PHP基于mysql.mysqli.pdo三种方式连接MySQL数据库的相关操作技巧与 ...
- 计算机文件保存方式,Word文档的三种保存方式
word中有多种保存文档的方式.可保存当前处理的活动文档 (活动文档:正在处理的文档.在 Microsoft word 中键入的文本或插入的图形将出现在活动文档中.活动文档的标题栏是突出显示的.),无 ...
- libIconv库实现中文中字符串与GBK、Unicode、UTF-8三种编码互转
libIconv库实现GBK.Unicode.UTF-8三种编码互转比window api更为简单,而且libIconv库跨平台. IibIconv库在windows下的编译参照windows下使用V ...
- php带参数单元测试_一文搞定单元测试核心概念
基础概念 单元测试(unittesting),是指对软件中的最小可测试单元进行检查和验证,这里的最小可测试单元通常是指函数或者类.单元测试是即所谓的白盒测试,一般由开发人员负责测试,因为开发人员知道被 ...
- python语言语句快的标记是什么_一文搞懂Python程序语句
原标题:一文搞懂Python程序语句 程序流 Python 程序中常用的基本数据类型,包括: 内置的数值数据类型 Tuple 容器类型 String 容器类型 List 容器类型 自然的顺序是从页面或 ...
最新文章
- python construct_python入门第一步
- 为什么C++(感谢waterwalk翻译)
- 艾特某人代码实现_为何敲代码,学好数学很重要?
- 释放C盘空间27招具体优化技巧
- nginx一 之负载均衡介绍
- LAMP搭建之三:php编译安装
- Codeforces Round #757 (Div. 2)
- 选择在何处重构(下)
- Lync Server多SIP域环境和简单URL地址部署
- [CareerCup] 7.7 The Number with Only Prime Factors 只有质数因子的数字
- weblogic设置classpath、debug端口和log目录
- c语言爬楼梯不用递归,[leetcode]爬楼梯的递归和非递归方法
- 玩转流量,天下无锅——IT运维人员的九阳神功(上)| 技术分享
- 【go1.18】error obtaining VCS status: exit status
- (三)JVM成神路之全面详解执行引擎子系统与JIT即时编译原理
- RISC-V Assembly Programmer's Manual
- 机器学习西瓜书第一章总结
- 【2017/07】实验记录——SSSP
- 实战-H3C交换机之Web界面
- python培训视频课程学习路径