字母a的6种表示方法,以及其背后的编码知识'\a','\141'',\x61,'\u0061','\u{0061}'

我们前端是最常见的字符,符号,数字,英文,中文,我们通常都是使用直接量来表示,偶尔会在正则表达等场景用到UTF-16码点的格式,问题来了,那你知道JS有几种字符表示方式吗?

答案:至少6种,以字符a为例子:

`a`//'a''a'//'a''\a'//'a''\141'//'a''\x61'//'a''\u0061'//'a''\u{0061}'//'a'前三种都很理解,后面这又是\,\x,\u,\u{},这都是什么玩意?

别急,我们一一道来。

更多前端基础进阶知识,可以

特别申明:测试代码最新版chrome上执行。

完全理解字符表示,还是需要一些简单的编码知识,我们一起来看看吧。

ASCII码一共定义了128个字符,例字母a是97(01100001)。这128个字符只使用了8位二进制数中的后面7位,最前面的一位统一规定为0。

Unicode是字符集,为了兼容ASCII,Unicode规定前0-127个字符是和ASCII是一样的,不一样的是128-255这一部分。

我们一起看看ASCII128-255部分:

其给某个字符规定对应的数值,我们经常称其为码点。我们可以通过字符串的实例方法charCodeAt和codePointAt获取,前者只能准确获取码点值小于0xFFFF(65535)的码点。

''.codePointAt(0)//1311040x20020正确''.charCodeAt(0)//553600xd840错误'a'.charCodeAt(0)//970x0061正确对应的我们可以使用String的静态方法fromCharCode,fromCodePoint用码点获取对应的字符。

String.fromCodePoint(131104)//""正确String.fromCharCode(131104)//""错误String.fromCharCode(97)//"a"正确UTF-8,UTF-16我们平时接触比多的就是UTF-8和UTF-16,均是Unicode字符编写的一种实现。我们JS编码的字符串是UTF-16格式来存储的和表示的。

UTF-16对于码点小于0xFFFF的用2个字节(1个编码单元)表示,大于0xFFFF的编码用四个字节(2个编码单元)表示。具体的体现可以表现在字符的长度上。

"".length//2码点131104(0x20020)>65535(0xFFFF)"a".length//1"人".length//1这里强调0xFFFF是分界线,很重要。

我们可以使用数字实例toString()10进制转为相对应的进制。

97..toString(16)//6197..toString(2)//1100001下面进入正题,一起来看字符的表示:

\是一个特殊的存在,转义字符,大多数情况下,不产生什么作用。只对一些特殊的字符起作用。

从下可以看出\a这个\没有任何作用,对\r就不一样了。

其能表示的码点范围值为0-255。

这里提个问题,这里显示的ASCII的字符,还是Unicode的字符。

'a'.charCodeAt(0)//97console.log('\141')//a我们看一些特殊码点的字符,因为码点为31和127的字符,不能被显示或者表示。

//37=31..toString(8)'\37'//'\x1F'//177=127..toString(8)'\177'//'\x7F'至于为什么\177变为了\x7F,是不是有点疑惑,其实也很简单。当程序检查其值,不在可显示范围的时候,直接反向计算其原值,并转为16进制值,并使用\x两位十六进制格式表示。

//177=127..toString(8)'\177'//'\x7F'127.toString(16)//7f关于表示码点上限(255):

'\377'//""---码点255'\400'//'0'---码点256//大于255可以理解为'\40'+'0'回答开始的提问:我们这里显示的肯定是Unicode字符啊,前面提过了,JS字符编码采用的是UTF-16啊。可以用码点在128-255的一个字符试试,那就码点254的字符吧:

//376=254..toString(8)'\376'//'t'所以大家要明白,我们这各种字符表示方法,表示的都是Unicode字符。

关于\x两位十六进制格式,我们开讲。

我们可以用0x表示16进制的数字,所以\x大家也很好理解,是16进制。

0x61//970x表示16进制格式数字'a'.charCodeAt(0)//获取码点9797..toString(16)//转为16进制61'\x61'//'a'两位十六进制码点,0x00~0xFF(0~255),和\八进制码一样,不可显示的码点字符,直接显示其编码

'\x9F'//'\x9F'//编码输出'\xA1'//""//正常这个结果,在不通浏览器,可能输出还不一样。尽量采用最新版本的chrome去验证。

虽然输出的显示有些区别,但是都表示这玩意不能表示一个字符,请自重。

360浏览器:

firefox:

chrome:

这里固定是4位,少一位都不行。

还是4位,如果多了,截取前4位,后面的直接追加。看个例子,非常好理解。

'\u0061'//'a''\u00610'//'a0'这里也就反应了问题,码点大于0xFFFF,大于4位16进制的字符怎么表示???

ES6考虑了这个问题,于是推出了\u{+十六进制+},看下个章节。

我们之前说过,UTF-16是Unicode的一种实现,Unicode的代理区0xD800-0xDFFF,其不代表任何字符。同理,我们采用\u+四位十六进制方式,如果码点在这个区间,返回或者原字符(浏览器不同,可能返回不同),当然其他的码点也可能还没设定值或者是不可打印的。

'\uD800'//'\uD800''\uDFFF'//'\uD800'实际上UTF-16也就是利用了代理区,把码点大于0xFFFF字符分为高低两部分,索引值0获得的值实际上是高位部分,索引值1获得的是低位部分。

vartext="";text[0]//'\uD840'text[1]//'\uDC20'更多utf-16编码的知识,我们后续跟上。

ES6新增的能力。这个多了一个{}包裹。这个应该是可以一统江湖,可以表示码点低于0xFFFF的字符,也可表示码点大于0xFFFF的字符。

"\u{20020}"//''"\u{0061}"//'a'"\u{061}"//'a'"\u{61}"//'a'"\u{9}"//"\t"而且其还没有强制四位的限制,简直爽的没法没边。

ES6的模板字符串,可以说是爽歪歪,我们就也算其一种新的字符表示方式吧。

我们也是可以使用\u,\u{},\x格式的

//61="a".charCodeAt(0).toString(16)`我\u{61}`//我a`我\x61`//我a`我\u0061`//我a`我\a`//我a到这里,你们没觉得少了了点什么吗?没错\8进制,是不被允许的

如果,你非得用,那就${''}包裹一下:

`我${'\141'}`//'我a'实际的应用匹配中文的正则我们总不能去罗列,多义采取的是[\u4e00-\u9fa5]这种格式去匹配:

varregZH=/[\u4e00-\u9fa5]/g;regZH.test("a");//falseregZH.test("人");//trueregZH.test("");//false尴尬了不这里注意了,只能识别常见中文。,毕竟码点的范围就那么大点。

module.exports='\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002'+'\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';我们还是输出一下吧:

'\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002'+'\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'//'\t\n\v\f\r'CSScontent属性和CSS字体图标现代浏览器,已经支持中文,但是建议还是使用\16进制编码格式。这里使用的是\16进制,不需要u也不需要{},支持码点大于0xFFFF的字符

div.me::before{content:"\6211";//我padding-right:10px;}div.me::before{content:"\20020:";//padding-right:10px;}CSS颜色色值字体颜色,背景颜色,边框颜色等等,其有一种表示方式就是6位16进制,当然也有简写形式。

constspRegexp=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;functionchCounts(str){returnstr.replace(spRegexp,'_').length;}chCounts("")//1"".length//2ES6中的方式就多一些了:

constisPNG=check([0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a]);//PNG图片对应的魔数constrealFileElement=document.querySelector("#realFileType");asyncfunctionhandleChange(event){constfile=event.target.files[0];constbuffers=awaitreadBuffer(file,0,8);constuint8Array=newUint8Array(buffers);realFileElement.innerText=`${file.name}文件的类型是:${isPNG(uint8Array)"image/png":file.type}`;}其他写在最后不忘初衷,有所得,而不为所累,如果你觉得不错,你的一赞一评就是我前行的最大动力。

THE END
1.字体转换器哪个好?字体转换器下载手机字体转换工具字体转换器是专门用于转换字体的工具。一般的字体转换器都支持转换繁体到简体,简体到繁体,还能进行英文的转换;还有一些专门的字体转换器,专门用于转换成特殊字体的,如转换成藏文字体、艺术字体、3D字体等。有的字体转换器还支持转换整片文章文字,方便用户阅读观看。http://www.downcc.com/k/ztzhq/
2.大写转换器app排行榜前十名偏玩手游盒子分享十大大写转换器app排行榜前十名手机应用,编辑为您推荐手机大写转换器app排行榜第一名到前5名到前十名的应用。找大写转换器app有哪些、大写转换器app哪个好用,上偏玩手游盒子https://m.pianwan.com/s/zj-438625
3.最好用的十大字体转换器在线字体转换器推荐字体转换软件哪个好字体转换软件有哪些?中国文化博大精深,各种各样的字体不计其数,随之衍生的网络字体也越来越多。下面maigoo小编就和大家一起看看在线字体转换器(包括网站和软件)有哪些。例如FIVU字体网、字魂网、字体视界、特殊文字-特殊字体转换App等,都较具代表性。 01 FIVU字体网 fivu.cn 综合指数:92.0 02 特殊文字-特殊https://www.maigoo.com/top/423646.html
4.常见问题FAQ肯为旎邮件DIY答:可以使用空格来增加段落与单元格边框之间的空白,但不建议那么做,原因有二:一是有更好的方法,即使用样式中的间距;二是假如几个段落的字体不一样的话,是无法准确来对齐的。建议使用“样式”中的间距来设置单元格的空白,这样更简单且更整齐。请参阅样式的使用(即样式面板中的间距),点击这里查看。http://diy.kenweini.com/problems
5.中国共产党威海市委员会组织部经验交流PPT演示文稿的基本操作我们只要将该文件夹复制到优盘或CD上,以后无论到那里,不管计算机上是否安装有PowerPoint或需要的字体,幻灯片均可正常播放了。需要注意的几点,一是操作系统须Windows 98第二版及其以上版本。二是播放器不支持运行宏、程序或嵌入的对象等。三是链接的图形最好用.jpg等常用格式,有好多在PowerPoint中能支持的格式在播放http://www.whzzb.gov.cn/art/2014/7/15/art_34385_941618.html
6.想要不侵权?收下这篇可能是最全面的书法字设计指南!在现代设计中,应用最广泛的字体之一就是行书字体,很多人会称为书法体。其实单纯就行书字体而言,称其书法体还是比较片面,有的人把历史长河中出现的文字都称为书法字体,有的人则认为书法字可以用篆体,隶书,楷体,行书,草书,这五种书体来概括,这里我们不用深入的追究如何定义书法字,我们只需要了解每个文字的历史和行书https://www.uisdc.com/calligraphy-font-design-guide
7.把字体转换为毛笔字的软件,毛笔字体下载大全繁体毛笔草书字体下载:下载链接提取码:m7qe 1、第一字体网提供的毛笔草书字体下载之后均为通用的TTF字体文件格式,仅供学习之用,由于字库的设计需要付出大量的心血,若您需要将其用作商业用途,我们强烈建议您向原作者联系购买。 2、在不同操作系统上使用和安装毛笔草书字体的方法: Windows系统的通用方法:打开“控制面板https://www.pinunu.com/money/bztzhwa.html
8.怎么把pdf竖版繁体字转换成横版Word简体字PDF中的竖排繁体字转化为Word横排通常涉及到文字识别(OCR)技术和文字格式转换。首先,使用具有OCR功能的软件将PDF中的繁体字识别并转换成可编辑的文本格式;其次,将识别后的文本导入Word,并调整文字方向为横排。OCR识别的精确度对转换效果至关重要,而且需要注意,繁体字的字形和简体字略有不同,识别软件需要支持繁体字以https://zhuanlan.zhihu.com/p/722217988
9.jpg图片转PDF怎么转换?这三个小技巧好用又简单这三个小技巧好用又简单 众所周知,PDF文件格式具有较高的稳定性,即在不同的设备打开PDF文件,其中的排版、字体、字号不易出现错乱的情况,因此我们一般会将资料存储为PDF文件格式,方便阅读与传输。word文档转PDF文件,大家应该都知道怎么操作,但有一些资料是图片格式的该怎么办呢?jpg图片转PDF怎么转换呢?下面,有三小https://tech.china.com/article/20220725/072022_1110114.html
10.最好用的字体转换器字体转换器官方免费下载ZOL软件下载合集页提供最好用的字体转换器免费下载,为您推荐实用和热门的字体转换器,更多好用的字体转换器尽在中关村在线下载频道。https://xiazai.zol.com.cn/heji/4970/pic.html
11.iconfonticonfont-国内功能很强大且图标内容很丰富的矢量图标库,提供矢量图标下载、在线存储、格式转换等功能。阿里巴巴体验团队倾力打造,设计和前端开发的便捷工具https://www.iconfont.cn/
12.在线字体转换器可复制个性签名转换器可复制2、字体安装方法是,下载需要的字体,解压,复制,打开“控制面板--字体文件夹”,“粘贴”; 3、打开ps软件就可以找到安装的字体了,如果电脑上没有安装某中艺术字体,ps软件打开时会用默认字体代替。 二、个性签名转换器可复制 个性签名转换器可复制 在互联网的时代,个性签名已经成为了人们表达自我和展示个性的重要途径https://tool.a5.cn/article/show/76802.html
13.EOTFast(很好用的字体转换工具)eotfast资源之前找这个软件找的挺辛苦,估计很多人也找不到,所以干脆免费共享,有需要的就拿去用吧,用法很简单,直接把ttf格式的字体拖到下载的exe文件里,就会自动生成eot文件了资源推荐 资源评论 EOTFast--字体转换工具 浏览:0 一个比较好用的小工具,用法很简单,直接把ttf格式的字体拖到下载的exe文件里,就会自动生成eot文件https://download.csdn.net/detail/u010488325/6235387
14.真好毛笔体网毛笔字在线生成器毛笔字体转换器真好毛笔体网最初是为了黑板报毛笔字体参考而创造的网站。它提供了多种毛笔字体在线生成、转换和设计的功能,以及毛笔楷书字帖、毛笔字入门、毛笔书法字体下载等服务。作为互联网上第一款字体转换器,真好毛笔体网一直忠诚且稳定地为用户提供免费服务。https://pidoutv.com/sites/18363.html
15.免费字体万能转换器软件22个PPT宝藏网站,你值得拥有,不收藏你会今天这篇推文,我会从PPT模板、图片、图标、字体、颜色、插件等各个方面推荐我收集和使用过的最好的工具,所有的网站工具都是我反复使用留下来的其中。所有文字介绍都是根据我自己的经验逐字逐句输入的。所有的图片演示都是用PPT精心打字并一一制作的。可以说是诚意满满,有用的信息也不少。对于这一系列的推文,我们会https://font.nuanque.com/?p=3346
16.word转pdf字体变了处理方法介绍word转pdf字体变了处理方法,我们可以在转换文档格式之前,在word文档中将字体样式设置成标准样式的字体,或者直接使用专业的pdf文档转换工具,就可以避免出现文档转换时更改字体样式的问题了。Word和pdf都是重要的文档存储格式,pdf文档的稳定性更强,适合用来存储重要的资料。所以工作的时候会有将word文档转换成pdf文档的操作https://pdf.wondershare.cn/convert/371015.html
17.Python快乐编程中学学科创意编程实例简单地说,编程就是人类想办法实现让计算机“干活”的过程。计算机怎么会听我们的话,按我们的想法把事情做好呢?如果我们用计算机能懂的语言写出事情的处理方法,让计算机乖乖地去执行,那么,我们做的就是编程工作。指挥计算机的命令集中到一起就构成了程序。 https://labs.epubit.com/bookDetails?id=UBbf3a472ecc2d
18.安装系统常见问题2345dn使用高速读写U盘(读取优先),或者使用固态硬盘当移动硬盘,然后刷PE,当U盘用。 考虑到移动硬盘引导容易损坏,可多备一个U盘进PE后,拔U盘,再插移动硬盘,同样可安装系统。 HP M126a打印机,系统不支持请求的命令 方法一、清除已经安装的m126a驱动,然后去官方下载最新版安装。 https://2345dn.com/fqa1.html/comment-page-2
19.《管理办法》常见问题解答主页答:首先应仔细核对《电器电子产品有害物质限制使用达标管理目录(第一批)》文件中产品范围及定义以及适用范围说明中对产品的描述,符合描述特性的产品应属于达标管理目录产品;其次对于外形相似功能不同的产品,应考虑其主要设计功能;再次注意区分好部件、产品和系统之间的关系;最后应注意对于本目录中的产品,当作为目录外产品https://www.cesi.cn/rohs/201901/4661.html
20.识别字体的软件哪个好?分享最好用的识别字体软件识别字体的软件哪个好?分享最好用的识别字体软件 目前网络上也是有很多的识别字体的软件,大家应该是最清楚不过,那么你们是下载哪个识别字体的软件呢?今天小编就带大家一起认识一下比较多人下载的福昕pdf365软件。 识别字体的软件哪个好 福昕pdf365是一款文件扫描、文字识别、拍图识字、图片转文字,在这个软件中都可以https://www.pdf365.cn/pdf365/pdfhelp/1087.html
21.家庭流媒体解决方案Jellyfin:我独特的使用方法摸鱼派【控制台】->【播放】->【备用字体文件路径】,勾选【启用备用字体】 格式转换 由于字幕组提供的字体多为.otf,.ttf 等,他们的文件大小最大的甚至在 27MB 左 右,这对于 WEB 传输可以说是相当大的负担了,参考 Jellyfin 官方文档我们知 道可以使用.woff2 格式,这是一种专用于 Web 开发中使用的高效的字体压缩https://fishpi.cn/article/1717465933092