JavaScript Unicode 规范化
Posted
技术标签:
【中文标题】JavaScript Unicode 规范化【英文标题】:JavaScript Unicode normalization 【发布时间】:2011-12-08 00:33:48 【问题描述】:我的印象是 javascript 解释器假定它正在解释的源代码已经被规范化。什么,归一化到底是什么?它不能是文本编辑器,否则源的明文表示会改变。是否有一些“预处理器”进行规范化?
【问题讨论】:
我相信是浏览器引擎处理它。这就是为什么浏览器在支持和不支持的方面存在差异的原因。 【参考方案1】:我已经更新了@bobince 的回答:
var cafe4= 'caf\u00E9';
var cafe5= 'cafe\u0301';
console.log (
cafe4+' '+cafe4.length, // café 4
cafe5+' '+cafe5.length, // café 5
cafe4 === cafe5, // false
cafe4.normalize() === cafe5.normalize() // true
);
【讨论】:
【参考方案2】:不,根据 ECMAScript 5,JavaScript 上没有自动使用或什至可用的 Unicode 规范化功能。所有字符作为其原始代码点保持不变,可能采用非规范形式。
例如尝试:
<script type="text/javascript">
var a= 'café'; // caf\u00E9
var b= 'café'; // cafe\u0301
alert(a+' '+a.length); // café 4
alert(b+' '+b.length); // café 5
alert(a==b); // false
</script>
更新: ECMAScript 6 will introduce Unicode normalization for JavaScript strings.
【讨论】:
需要指出的是,JavaScript PREDATES UTF-16 实际上暴露了 UCS-2。 (它在内部使用的可能是也可能不是 UTF-16,但它会将 UCS-2 踢出。)【参考方案3】:ECMAScript 6 引入了 String.prototype.normalize()
,它会为您处理 Unicode 规范化。
unorm 是此方法的 JavaScript 填充程序,因此即使目前没有一个引擎原生支持它,您今天也可以使用 String.prototype.normalize()
。
有关如何以及何时在 JavaScript 中使用 Unicode 规范化的更多信息,请参阅JavaScript has a Unicode problem – Accounting for lookalikes。
【讨论】:
【参考方案4】:如果您使用的是 node.js
,则有一个 unorm
库用于此。
https://github.com/walling/unorm
【讨论】:
以上是关于JavaScript Unicode 规范化的主要内容,如果未能解决你的问题,请参考以下文章