【问题标题】:JavaScript Unicode normalizationJavaScript Unicode 规范化
【发布时间】:2011-12-08 00:33:48
【问题描述】:

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

【问题讨论】:

  • 我相信是浏览器引擎处理它。这就是为什么浏览器在支持和不支持的方面存在差异的原因。

标签: javascript unicode normalization unicode-normalization


【解决方案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

      【讨论】:

        猜你喜欢
        • 2013-05-04
        • 1970-01-01
        • 2011-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多