JavaScript для нормализации Unicode

У меня сложилось впечатление, что интерпретатор JavaScript предполагает, что исходный код, который он интерпретирует, уже нормализован. Что именно нормализует? Это не может быть текстовый редактор, иначе изменится текстовое представление источника. Есть ли какой-то" препроцессор", который делает нормализацию?

4 ответов


нет, нет функции нормализации Юникода, используемой автоматически на-или даже доступной-JavaScript в соответствии с ECMAScript 5. Все символы остаются неизменными в качестве исходных кодовых точек, потенциально в ненормальной форме.

например, попробовать:

<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 введет нормализацию Unicode для строк JavaScript.


ECMAScript 6 вводит String.prototype.normalize(), который заботится о нормализации Unicode для вас.

unorm является JavaScript polyfill для этого метода, так что вы уже можете использовать String.prototype.normalize() сегодня, хотя ни один двигатель не поддерживает его изначально на данный момент.

дополнительные сведения о том, как и когда использовать нормализацию Юникода в JavaScript, см. В разделе JavaScript имеет проблему Unicode – учет lookalikes.


Если вы используете node.js, есть unorm библиотека для этого.

https://github.com/walling/unorm


я обновил ответ @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
);