ES6-字符串的扩展-16进制

简介: es6记录

为什么'\u{1F680}'==='\uD83D\uDE80'

首先需要了解JS代码里面的unicode编码字符的语法是:\uXXXX.这种表示法只能记录码点在\u0000~\uFFFF之间(即0~65535)的字符,超出这个范围的字符,必须用两个双字节的形式表示.
对于大于0xFFFF(即65535 0x即16进制)的字符,先减去0x10000(即65536),然后转换为20bit的二进制数,然后分别填充两个码点空出的10bit,这就是需要两个码点字符的保存方式。

码点一: 0b110110(0b即二进制)
码点二: 0b110111

但是为什么是这两个码点呢?这与Unicode编码的设计者的设计有关.
Unicode编码0xD800-0xDFFF,共2048个码位,是一个被称作代理区(Surrogate)的特殊区域.代理区的目的用两个UTF-16字符表示0~0xFFFF(即0~65535)以外的字符。所有大于0xFFFF的码需要使用代理区的码点。

目前Unicode最大的码位是0x10FFFF(即1114111)

0x010000-0x10FFFF,需要使用2个代理码元表示,第一个码元为0xD800-0xDBFF(高位)范围是:1101 1000 0000 0000到1101 1011 1111 1111,第二个码元为0xDC00-0xDFFF(低位)范围是:1101 1100 0000 0000到1101 1111 1111 1111.

十进制 Unicode编码 说明 说明
55296-56191 0xD800-0xDB7F(896个) High Surrogates 高位替代
56192-56319 0xDB80-0xDBFF(128个) High Private Use Surrogates 高位专用替代
56320-57343 0xDC00-0xDFFF(1024个) Low Surrogates 低位替代

接下来我们把Unicode编码>65535的记为U,我们先计算U'=U-0x10000,然后将U'写成二进制形式:yyyy yyyy yyxx xxxx xxxx,那么U的UTF-16编码(二进制)就是:110110yyyyyyyyyy110111xxxxxxxxxx.

了解前边两个码点后,那么 0x1F680如果用两个双字节表示呢

  1. 先计算0x1F680-0x10000 结果为 0xF680

     (0x1F680-0x10000).toString(16)
    

    image.png

  2. 0xF680转化为2进制结果为0b1111 0110 1000 0000

     0xf680.toString(2)
    

    image.png

  3. 将上一步结果补全为20位的二进制数0b0000 1111 0110 1000 0000(前面加4个0)

  4. 填充两个码点空出的10bit,第一个码点填充为0b1101 1000 0011 1101 第二个码点填充为0b1101 1110 1000 0000
  5. 将两个填充后的码点转化为十六进制即为0xD83D0xDE80.
    image.png

'\u{1F680}'==='\uD83D\uDE80'

参考:
阮一峰 ECMAScript 6 (ES6) 标准入门教程 第三版
Unicode 编码理解

目录
相关文章
|
小程序 UED
软件工程毕设参考-基于微信小程序的干洗系统源码
该系统主要分为小程序和管理端两个部分。小程序包含登录/注册、轮播图、衣物信息、衣物添加干洗清单、创建清洗订单、我的订单、通知公告、我要留言、个人信息等功能。管理端包含登录、轮播图管理、留言管理、订单管理、通知管理、干洗衣物管理、留言管理、用户管理、个人信息等功能。通过该系统,用户可以方便地添加和管理衣物干洗清单,创建清洗订单并查看订单状态,以及查看系统公告和留言回复等信息。管理员可以方便地管理轮播图、留言、订单、通知、干洗衣物和用户等信息。该系统具有操作简便、用户体验好、管理高效等优点,可以为用户和管理员提供更加便利的服务。
|
机器学习/深度学习 算法
基于BP神经网络的人口预测
基于BP神经网络的人口预测
360 0
|
存储 算法 Cloud Native
C++ bcrypt算法 字符串加密,亲测有效
C++ bcrypt算法 字符串加密,亲测有效
|
11月前
|
前端开发 中间件 PHP
PHP框架深度解析:Laravel的魔力与实战应用####
【10月更文挑战第31天】 本文作为一篇技术深度好文,旨在揭开PHP领域璀璨明星——Laravel框架的神秘面纱。不同于常规摘要的概括性介绍,本文将直接以一段引人入胜的技术剖析开场,随后通过具体代码示例和实战案例,逐步引导读者领略Laravel在简化开发流程、提升代码质量及促进团队协作方面的卓越能力。无论你是PHP初学者渴望深入了解现代开发范式,还是经验丰富的开发者寻求优化项目架构的灵感,本文都将为你提供宝贵的见解与实践指导。 ####
|
11月前
|
Ubuntu
Ubuntu禁止内核自动更新
通过上述步骤,您可以在Ubuntu系统中有效地禁用内核的自动更新。这些步骤包括锁定内核版本、禁用自动更新配置、移除不需要的内核包以及禁用相关的自动更新服务。这样可以确保系统在内核层面保持稳定,避免因内核自动更新导致的不必要问题。
2418 1
|
传感器 机器学习/深度学习 运维
|
存储 SQL 关系型数据库
20. Mysql 游标的定义和使用
20. Mysql 游标的定义和使用
207 1
|
人工智能 自然语言处理 搜索推荐
只用文本,3分钟生成一个网站!首个ChatGPT版网站开发平台
【2月更文挑战第30天】Dora AI是一个创新的生成式AI网站开发平台,让用户通过文本输入快速创建各类网站,无需模板,支持动态生成和个性化定制。平台提供直观的拖拽编辑,降低使用门槛,3分钟内即可生成网页。用户输入提示词或选择“Surprise Me”可获得不同风格的页面。尽管部分高级功能需会员,但基本编辑功能对所有用户开放。Dora AI正研发更多高级功能,如文本生成动画和3D网站,以提升用户体验。
419 2
只用文本,3分钟生成一个网站!首个ChatGPT版网站开发平台
|
测试技术 Linux Docker
Docker部署RPG网页小游戏
Docker部署RPG网页小游戏
692 2
|
JavaScript
vue3显示和隐藏元素?
vue3显示和隐藏元素?