16

我的印象是 JavaScript 解释器假定它正在解释的源代码已经被规范化。什么,归一化到底是什么?它不能是文本编辑器,否则源的明文表示会改变。是否有一些“预处理器”进行标准化?

4

4 回答 4

17

ECMAScript 6 引入了String.prototype.normalize()它为您处理 Unicode 规范化。

unorm是此方法的 JavaScript 填充程序,因此String.prototype.normalize()即使目前没有一个引擎原生支持它,您现在也可以使用它。

有关如何以及何时在 JavaScript 中使用 Unicode 规范化的更多信息,请参阅JavaScript 存在 Unicode 问题– 考虑相似性。

于 2013-12-09T14:20:14.857 回答
16

不,没有根据 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 将为 JavaScript 字符串引入 Unicode 规范化。

于 2011-10-14T21:25:14.263 回答
12

如果您正在使用node.js,则有一个unorm库。

https://github.com/walling/unorm

于 2011-12-11T15:56:52.357 回答
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
);
于 2018-01-06T18:53:18.593 回答