У меня создается впечатление, что интерпретатор JavaScript предполагает, что исходный код, который он интерпретирует, уже нормализован. Что, собственно, нормализуется? Он не может быть текстовым редактором, иначе будет отображаться текстовое представление источника. Есть ли какой-нибудь "препроцессор", который выполняет нормализацию?
Нормализация Юникода JavaScript
Ответ 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. Учет поисковых запросов.
Ответ 3
Если вы используете node.js
, для этого есть библиотека unorm
.
Ответ 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
);