当前位置:首页 > 日记 > 正文

支持Unicode字符集的Javascript语言

支持Unicode字符集的Javascript语言
上个月,我做了一个分享,详细介绍了Unicode字符集,以及Javascript语言的支持。

1。什么是Unicode

Unicode源于一个非常简单的想法:世界上所有的字符都包含在一个集合中。如果计算机支持这个字符集,它将显示所有字符,并且不会再出现随机代码。
它从0开始,并为每个符号指定一个编号,称为代码点。例如,代码点0的符号为null(表示所有二进制位为0)。

复制代码如下:0000

在上一种形式下,u表示十六个十进制数后面跟着的是Unicode的代码点。
目前,Unicode的最新版本是7版,共有109449个符号,其中74500个是中国和韩国。它可以近似地认为超过2 / 3世界上现有的符号是从东亚语言。例如,中国的好的代码点是十六597d。

复制代码如下:U + 597d =好

这么多的符号,Unicode不是一次性定义,而是一个分区定义,每个区域都可以存储65536(216)个字符,称为平面(平面),目前,总共有17个(25)面,也就是说,整个Unicode字符集的大小现在是221。

第一65536字位,称为基础平面(简称BMP),从0到16范围和216-1,U + 0000 U + FFFF 16。所有最常见的字都放在这个平面,这是Unicode首先宣布第一架飞机。

其余的字符放在辅助平面(简称SMP),从U + 010000 u + 10ffff代码点范围。
二、UTF-32和UTF-8

Unicode只指定每个字符的代码点,用哪种字节顺序表示代码点,这涉及编码方法。

最直观的编码方法是每个代码点是由四个字节表示,和字节的内容对应的码点之一。这种编码方法被称为utf-32.for例子,代码点0是由四个字节0表示,和编码597d 0在前面两字节。

复制代码如下:u + 0000 = 0x0000 0000u + 597d = 0x0000 597d
对UTF-32的优点是转换规则简单直观,且搜索效率高。缺点是空间的浪费,英语课文的内容相同,它将比ASCII码的大四倍。这是一个致命的缺陷,导致没有人事实上使用这种编码方法,和HTML 5标准指定的网页不能被编码为UTF-32。
人们真正需要的是一个节省空间的编码方法,导致utf-8.utf-8的诞生是一个长期的编码方法与特征长度从1字节到4字节。更常用的字,短的字节,前128个字符,只有1个字节,完全一样的ASCII码。

编号范围的字节值- 0x007f10x0080 - 0x07ff20x0800 - 0xffff30x010000 - 0x10ffff4

由于空间节能UTF-8,它已成为最常见的网页在互联网上的编码,但是,这不是今天的主题密切相关,我将不深入,具体的转换方法,可以参考字符编码笔记。

三、以UTF-16简介

UTF-16编码UTF-32和UTF-8之间,并结合两种编码方法的特点,固定长度和可变长度。

其编码规则很简单:基本面上的字符占用2个字节,并在辅助平面字符占用4字节,UTF-16编码长度为2个字节(U + 0000 u + FFFF)或4字节(U + 010000 u + 10ffff)。
所以有个问题。当我们遇到两个字节时,我们怎么看它是一个字符本身,还是需要用另外两个字节来读取它

它非常精巧,我不知道它是否有意设计。在基本面,从U + U + DFFF D800是一个空白段,即这些点不符合任何字符。因此,这个空的部分可以用图的辅助平面字符。

特别是,有220位在辅助平面字符,也就是说,至少有20个二进制位是这些characters.utf-16要求将20位分成两部分。第一个10比特映射从U + D800 U + dbff(空间的大小210),这是所谓的高位置(H),后者10比特映射从U + dc00 U + DFFF(空间的大小210),这是所谓的低比特(L)。这意味着一个辅助平面字符的字符表示拆成两个基本面。
所以当我们遇到了两个字节,发现其编码点u + D800和U + dbff之间,我们可以得出这样的结论:两个字节,密切跟踪代码点应U + dc00 U + DFFF之间,和四字节的解释必须在一起。

转换公式四和UTF-16

当Unicode代码点变为UTF-16,它首先区分基本面特征之间,或辅助平面字符。如果是前者,编码直接转换为带形成相应的十六,长度与两个字节。

复制代码如下:U + 597d = 0x597d

如果它是辅助平面字符,Unicode 3版本给出了代码转换公式。

复制代码如下:H = math.floor((c-0x10000) / 0x400)+ 0xd800l =(C 0x10000)% + 0xdc00 0x400
在性质上,它是一个辅助平面字符,代码点u + 1d306,和把它变成UTF-16的计算过程如下。

复制代码如下:H = math.floor((0x1d306-0x10000) / 0x400)+ 0xd800 = 0xd834l =(0x1d306-0x10000)% + 0xdc00 = 0xdf06 0x400

所以,一个字符的UTF-16编码是0xd834 df06,一个长度为四字节。
五,Javascript使用什么类型的代码
Javascript语言使用Unicode字符集,但只支持一种编码方法。

这个代码是不是UTF-16和UTF-8,也不是utf-32.the上述编码方法,Javascript不使用。

Javascript使用UCS-2!
六、UCS-2编码

你怎么突然杀UCS-2这需要一点历史。

在上网的时候没出现,有两支球队谁想做一个统一的字符集。是Unicode的团队,成立于1989,和其他早期,1988 UCS团队。当他们发现彼此的存在,很快就被认为没有两套统一字符集的世界。

1991年10月,两支球队决定合并字符集。也就是说,从现在起,只有一套字符集,即Unicode,修改先前公布的字符集,和UCS的编码点会完全一样的Unicode。
当时的实际情况是,UCS的发展速度比Unicode更快。早在1990,第一个编码UCS-2发布,采用2字节编码点的代表人物。(只有一个平面的当时,这是基本面,所以2个字节是不够的。)UTF-16编码1996年7月下旬发布公告,宣布是UCS-2的超集,即使用UCS-2字符编码的基本面,辅助平面定义表示4字节字符。

两者之间的简单关系,UTF-16取代UCS-2,或者UCS-2集成到utf-16.so,现在只有UTF-16,没有UCS-2。

七、javascript的诞生背景

所以,为什么不选择一个更先进的Javascript UTF-16使用UCS-2已经淘汰了吗

答案很简单:不想做的事,不是的。因为当Javascript语言的出现,没有UTF-16编码。

1995年5月,布兰登·艾奇用了10天时间设计Javascript语言。十月,第一个解释引擎问世。明年十一月,网景正式提交语言标准ECMA(看到Javascript诞生)在整个过程中,相对于UTF-16的发布时间(1996年7月),这将是明确的,网景没有其他选择,当时,只有一个UCS-2编码方法是可用的!
八,Javascript字符函数的局限性

因为Javascript只能处理UCS-2编码,在这种语言中所有的人物都是2字节,如果是4字节的字符,它将被视为两个双字节字符。Javascript的角色功能的影响,这一点不能返回正确的结果。
在性格上,例如,其UTF-16编码是4个字节的0xd834 df06。问题是,4字节的代码不属于UCS-2,Javascript不认识它,只把它作为一个单独的两个字符u + d834 U + df06.as前面所提到的,这两个代码点是空的,所以Javascript会认为它是一个字符串,两空字符!
上面的代码显示Javascript认为字符的长度是2,第一个字符是一个空字符,并且第一个字符的代码点0xdb34。这些结果是不正确的!
要解决这个问题,必须对代码点进行判断并手动调整。

复制代码如下:在(+指数= 0xd800,字符码<= 0xdbff){ output.push(文字+ string.charat(+指数));}否则{ output.push(字符);} }

上面的代码表明,当我们通过字符串时,我们必须对代码点做出判断。只要是从0xd800到0xdbff区间,我们必须一起读的2字节。

所有Javascript字符操作函数都存在类似的问题。

String.prototype.replace()()()string.prototype.slice string.prototype.substring…

上述函数都只适用于2字节的代码点。要正确处理4字节的代码点,您必须逐一部署自己的版本,以确定当前字符的代码点范围。

九,ECMAscript 6
Javascript的下一个版本,ECMAscript 6(称为6),大大增强了Unicode支持,基本解决了问题。

(1)正确识别人物

6能自动识别4字节的编码点。所以,这是非常简单的遍历字符串。

将代码复制如下…

但是,为了保持兼容,长度属性仍然是相同的行为方式。

复制代码如下:Array.from(字符串长度)。

(2)码点表示法

Javascript允许Unicode字符直接用一个代码点表示,它被写为斜杠+ +代码点。

复制代码如下:好的= = = u597d ' /真的

然而,这表示4字节的代码points.es6改正问题是无效的,只要代码点放在括号内,可以正确识别。
(3)字符串处理函数

6又增加了几个功能专门处理4字节码点。

string.fromcodepoint():返回相应的角色String.prototype.codePointAt()从Unicode代码点:返回对应的码点String.prototype.at()从性格:返回给定的字符的位置。

(4)正则表达式

ES6 provides a U modifier to add 4 byte code points to regular expressions.
(5)Unicode标准化

除了字母外,有些字符还有附加符号。例如,汉语拼音,字母表上的声调是一个附加的符号。
Unicode提供两表示。一个是用附加符号字符,即一个码位表示一个字符,比如代码U + 01d1;另一个是符号将作为一个单独的代码,用复合材料显示的主要特征,即两码点为例,可以表示一个字符,可写为O(U + 004f)+(U + 030c)。

复制代码代码如下所示:

方法

u01d1
两种方法

u004f u030c
这两种表示形式都是可视的和语义的。

复制代码代码如下所示:

u01d1= = = u004f u030c

/ false
6提供了一种规范方法允许Unicode

复制代码如下:( u01d1。规范)( u004f u030c。规范) / /真实= = =

更多关于6,看看ECMAscript 6 。

==========================

相关文章

PS图象处理软件网页游戏UI设计的主

PS图象处理软件网页游戏UI设计的主

网页,图象处理,教程,网页游戏,布朗,本课程的重点是网页首页的设计。我们需要根据客户的要求确定网页内容,然后收集相关资料,根据我们的创意,使画面美观、视觉冲击。 来源:VC作者:畅游VC 本课程的重点是网页首页的设计。我们需要根据客户的要求…

单幅浏览的javascript实现

单幅浏览的javascript实现

浏览,单幅,电脑软件,javascript,使用空闲时间和学习Javascript语言,编写一个链接来浏览单个图片。 复制代码代码如下所示: 图像画廊 功能showpic(whichpic){ 无功源= whichpic.getattribute(href); / / href属性获取点击元素的当前值 VaR的占位符= d…

PS图象处理软件层简单画一个栩栩如

PS图象处理软件层简单画一个栩栩如

栩栩如生,图象,处理软件,画一,简单,下面的朋友详细的PS图象处理软件层绘制一个真实的使用荷包蛋。荷包蛋真的是真的,而且这个教程的难度不是很大。 本教程介绍给朋友,使用PS图象处理软件层绘制一个真实的荷包蛋简单。教程比较简单。荷包蛋真…

使用PS图象处理软件的一个好办法一

使用PS图象处理软件的一个好办法一

一幅,图象,好办法,处理软件,电脑软件,接下来,萧边向您介绍使用PS图象处理软件制作图片与另一张图片合并。这个教程很好。我推荐给你喜欢的朋友。你可以一起学习。 利用PS图象处理软件图片与另一相结合,可以。 1,选择图片,执行羽化,然后反选,再按…

烟花画写实中国象棋棋子

烟花画写实中国象棋棋子

中国象棋,棋子,烟花,电脑软件,本教程是向大家介绍利用烟花来绘制逼真的中国象棋棋子,画画的方法很简单,建议你喜欢的朋友学习跟随。 烟花图案有多种填充形式。如果能充分展示其图案的纹理特征,就可以很方便地绘制各种图形的逼真效果。现在,我…

ajax四要素的关系介绍

ajax四要素的关系介绍

四要,关系,电脑软件,ajax,通过使用Javascript来操作DOM元素刷新页面和重组数据,CSS可以为应用程序提供一个一致的接口,利用XMLHttpRequest对象与服务器进行异步通信,提交请求,在背景和获得的最新数据,定义了业务规则和流程。应用程序获取数据从服务器…

3实现在Node.js同步操作

3实现在Node.js同步操作

同步操作,电脑软件,Node,js,众所周知,异步的特点和优势是得天独厚的,但在同步过程中同时需要(如执行控制程序:订单-> -> func1 func2 func3)也很常见。本文就是记录这个问题的一些想法。 需要执行的函数: 复制代码代码如下所示: VaR func1 =功…

PS图象处理软件对秋天美丽的阳光之

PS图象处理软件对秋天美丽的阳光之

阳光,之美,图象,处理软件,秋天,素描为蓝色和黄色,当材料直接以黄绿色到橙黄色,深色得到蓝色的初步颜色即可;然后将树林中的强光提取出来,用模糊滤镜制作透视灯效果。 素描为蓝色和黄色,当材料直接以黄绿色到橙黄色,深色得到蓝色的初步颜色即可;然…

PS图象处理软件创造了一个时尚、美

PS图象处理软件创造了一个时尚、美

分支,圣诞,图象,处理软件,创造了,本教程介绍PS图象处理软件的朋友创造一个美丽的树支圣诞快乐艺术字的使用方法,本教程是非常可爱的。难度不是很大,建议朋友你喜欢学习的教程在一起。 本文采用PS图象处理软件打造时尚美丽的树枝的圣诞艺术字…

面向对象的关键字用法分析

面向对象的关键字用法分析

关键字,面向对象的,电脑软件,本文的示例分析了Javascript对象的关键字用法,供大家参考,具体分析如下: 当您需要初始化一个属性时,您可以在原型对象中使用这个关键字: 复制代码代码如下所示: 功能人(){ this.name =金美; this.age = 25; }; 新的人(); 新…

js做了一个简单日历的完整例子。

js做了一个简单日历的完整例子。

例子,日历,完整,简单,电脑软件,本文介绍了用js制作一个简单日历的方法,供大家参考: 今天我学会了用js来实现日历的制作。通过对这个用法的回顾,它与标签的制作有点不同。新的对手,我希望我能坚持下去,那么你的JS大神。 使用的innerHTML Now t…

PS图象处理软件的设计创意风格2015

PS图象处理软件的设计创意风格2015

教程,创意,图象,处理软件,海报,本教程介绍2015旦使用PS图象处理软件设计的创意海报风格双朋友方法教程出来的很有创意,马上就要到圣诞节和元旦,我相信这个教程对大家会有帮助的,好的,在这里我们要学习。 本教程使用PS图象处理软件设计的2015年…