JavaScript Unicode规范化

Mat*_*tty 15 javascript unicode normalization unicode-normalization

我的印象是JavaScript解释器假定它正在解释的源代码已经被规范化了.什么,正常化?它不能是文本编辑器,否则源的明文表示会改变.是否有一些"预处理器"可以进行规范化?

bob*_*nce 16

不,根据ECMAScript 5,没有自动使用或甚至可用于JavaScript的Unicode规范化功能.所有字符都保持不变,因为它们的原始代码点可能是非正常形式.

例如尝试:

<script type="text/javascript">
    var a= 'café';          // caf\u00E9
    var b= 'cafe?';          // cafe\u0301
    alert(a+' '+a.length);  // café 4
    alert(b+' '+b.length);  // cafe? 5
    alert(a==b);            // false
</script>
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*ens 15

ECMAScript 6介绍了String.prototype.normalize()为您处理Unicode规范化.

unorm是这种方法的JavaScript polyfill,因此String.prototype.normalize()即使当前没有一个引擎本身支持它,你也可以使用它.

有关如何以及何时在JavaScript中使用Unicode规范化的更多信息,请参阅JavaScript具有Unicode问题 - 计算相似内容.


Eon*_*nil 12

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

https://github.com/walling/unorm