Нормализация JavaScript в Юникоде - PullRequest
14 голосов
/ 14 октября 2011

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

Ответы [ 4 ]

16 голосов
/ 15 октября 2011

Нет, функция нормализации Unicode не используется автоматически или даже недоступна для 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 представит нормализацию Юникода для строк JavaScript.

15 голосов
/ 09 декабря 2013

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

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

Для получения дополнительной информации о том, как и когда использовать нормализацию Unicode в JavaScript, см. В JavaScript есть проблема Unicode - Учет двойников .

12 голосов
/ 11 декабря 2011

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

https://github.com/walling/unorm

1 голос
/ 06 января 2018

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