Тот же текст, но не были равны, как конвертировать в ту же кодировку? - PullRequest
1 голос
/ 28 июня 2019

У меня проблема с обработкой текста.

(A) 'khách hàng'

(B) 'khách hàng'

A и B одинаковы, но они не равны в коде. Они выглядят одинаково, верно?

Вы можете увидеть мою проблему, набрав , нажав F12> Консоль> вставить 'khách hàng' === 'khách hàng'> Введите

Могу ли я преобразовать A и B в одну и ту же кодировку? И как?

Спасибо!

1 Ответ

2 голосов
/ 28 июня 2019

Да, две строки (A) и (B) используют разные формы нормализации: NFC (каноническая композиция) для (A), NFD (каноническая декомпозиция) для (B).

(A) khách hàng: U+006B U+0068 U+00E1 U+0063 U+0068 U+0020 U+0068 U+00E0 U+006E U+0067

(В) khách hàng: U+006B U+0068 U+0061 U+0301 U+0063 U+0068 U+0020 U+0068 U+0061 U+0300 U+006E U+0067

Чтобы сравнить их на равенство, обе строки должны быть сначала нормализованы к одной и той же форме; в JavaScript это можно сделать с помощью метода normalize () :

let A = 'khách hàng';
let B = 'khách hàng';
console.log (A === B); // -> false
console.log (A.normalize ('NFC') === B.normalize ('NFC')); // -> true
console.log (A.normalize ('NFD') === B.normalize ('NFD')); // -> true

Предупреждение : в зависимости от вашего веб-браузера, особенно в Firefox или Safari, копирование или вставка строки (B) может привести к появлению строки (A); кажется, что неожиданный шаг нормализации выполняется "за кадром" ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...