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 编码理解

目录
相关文章
|
安全 Java Shell
JDK9特性——模块化&REPL工具
谈到Java9大家往往第一个想到的就是Jigsaw项目(后改名为Modularity)。众所周知,Java已经发展超过20年(95年最初发布),Java和相关生态在不断丰富的同时也越来越暴露出一些问题:
304 0
|
4月前
|
传感器 数据采集 监控
[开源代码]基于STM32的环境检测与报警系统
本项目成功实现了基于STM32的环境检测与报警系统,能够同时监测水位、温度、湿度和亮度,并对每项参数独立设置安全范围,实现报警提示。
[开源代码]基于STM32的环境检测与报警系统
|
编解码 人工智能 缓存
自学记录鸿蒙API 13:实现多目标识别Object Detection
多目标识别技术广泛应用于动物识别、智能相册分类和工业检测等领域。本文通过学习HarmonyOS的Object Detection API(API 13),详细介绍了如何实现一个多目标识别应用,涵盖从项目初始化、核心功能实现到用户界面设计的全过程。重点探讨了目标类别识别、边界框生成、高精度置信度等关键功能,并分享了性能优化与功能扩展的经验。最后,作者总结了学习心得,并展望了未来结合语音助手等创新应用的可能性。如果你对多目标识别感兴趣,不妨从基础功能开始,逐步实现自己的创意。
436 60
|
存储 缓存 弹性计算
聚宽揭秘:为什么量化研究员喜欢在Kubernetes上使用Fluid简化数据管理?
在量化投研过程中,通过引入阿里云的 ack-fluid 技术,基于 JindoRuntime 的分布式缓存加速,解决了多数据源、弹性扩展、动态挂载等挑战,显著提升了数据处理效率和资源利用率,降低运营成本。
|
传感器 机器学习/深度学习 运维
预测性维护
预测性维护
|
人工智能 Java 程序员
一文彻底搞定电阻元件
电阻元件是限流器件,通过其电流与两端电压成正比(V=IR),阻值受温度、材料等影响。按特性分为线性与非线性,材料上有碳膜、金属膜等,用途涵盖限流、分压、偏置、滤波等。标称阻值有允许偏差,额定功率和最高工作电压需注意。色标法和直接读取法可用于识别阻值,万用表测量时需关闭电源并选择合适量程。电阻在电路设计中不可或缺,掌握其特性和应用对电子工程师至关重要。
1073 0
一文彻底搞定电阻元件
|
机器学习/深度学习 自然语言处理 算法
《Java 情感分析:前沿技术与方法全解析》
在数字化时代,情感分析是提取文本数据价值的关键技术。本文探讨了Java在这一领域的应用,涵盖自然语言处理工具(如Apache OpenNLP、Stanford NLP)、机器学习方法(如朴素贝叶斯、SVM)及深度学习框架(如TensorFlow、Deeplearning4j)。通过这些技术和工具,Java能够高效处理情感分析任务,广泛应用于社交媒体监测、客户反馈分析等场景,尽管仍面临文本多样性与复杂性的挑战。
496 9
|
Ubuntu
Ubuntu禁止内核自动更新
通过上述步骤,您可以在Ubuntu系统中有效地禁用内核的自动更新。这些步骤包括锁定内核版本、禁用自动更新配置、移除不需要的内核包以及禁用相关的自动更新服务。这样可以确保系统在内核层面保持稳定,避免因内核自动更新导致的不必要问题。
4151 1
|
Oracle 关系型数据库 数据挖掘
服务器数据恢复—raid5磁盘掉线热备盘未激活导致崩溃的数据恢复案例
服务器数据恢复环境: 某品牌X系列服务器,4块SAS硬盘组建了一组RAID5阵列,还有1块磁盘作为热备盘使用。服务器上层安装的linux操作系统,操作系统上部署了一个基于oracle数据库的OA(oracle已经不再为该OA系统提供后续服务支持)。 服务器故障: raid5中一块磁盘离线,热备盘未自动激活rebuild(原因不明)。服务器在运行一段时间后,另一块磁盘离线,RAID5阵列崩溃。用户方要求尽可能恢复服务器操作系统和服务器中的数据。
服务器数据恢复—raid5磁盘掉线热备盘未激活导致崩溃的数据恢复案例
|
机器学习/深度学习 人工智能 算法
将 Visual Basic 与人工智能结合:机器学习的初步探索
【4月更文挑战第27天】本文探讨了Visual Basic(VB)在人工智能,尤其是机器学习领域的应用。VB作为易学易用的编程语言,结合机器学习可为开发者提供简单的人工智能实现途径。通过第三方库、调用外部程序或自行开发算法,VB能实现图像识别、文本分类和预测分析等功能。尽管面临性能、人才短缺和技术更新的挑战,但随着技术发展,VB在人工智能领域的潜力不容忽视,有望创造更多创新应用。
585 0
下一篇
开通oss服务