Подтвердить что ты не робот

Нормализация Юникода JavaScript

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 4

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