JavaScript Unicode normalization



我的印象是JavaScript解释器假设它所解释的源代码已经被标准化了。规范化到底是什么?它不能是文本编辑器,否则源的明文表示将会改变。是否存在一些"预处理器"来进行规范化?

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

unorm是这个方法的JavaScript polyfill,所以你现在已经可以使用String.prototype.normalize()了,尽管目前没有一个引擎支持它。

有关如何以及何时在JavaScript中使用Unicode规范化的更多信息,请参阅JavaScript有一个Unicode问题 - Accounting For lookalikes

不,根据ECMAScript 5, javascript没有自动使用的Unicode Normalization特性,甚至没有可用的Unicode Normalization特性。所有字符保持其原始代码点不变,可能以非normal形式。

如试题:

<script type="text/javascript">
    var a= 'café';          // cafu00E9
    var b= 'café';          // cafeu0301
    alert(a+' '+a.length);  // café 4
    alert(b+' '+b.length);  // café 5
    alert(a==b);            // false
</script>

更新: ECMAScript 6将引入JavaScript字符串的Unicode规范化。

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

https://github.com/walling/unorm

我已经更新了@bobince的答案:

var cafe4= 'cafu00E9';
var cafe5= 'cafeu0301';

console.log (
  cafe4+' '+cafe4.length,                  // café 4
  cafe5+' '+cafe5.length,                  // café 5
  cafe4 === cafe5,                         // false
  cafe4.normalize() === cafe5.normalize()  // true
);

最新更新