Как декодировать суррогатные пары utf-16 emoji в uf8-8 и правильно отображать их в html? - PullRequest
0 голосов
/ 10 октября 2018

У меня есть строка , которая содержит xml .У него есть следующая подстрока

<Subject>&amp;#55357;&amp;#56898;&amp;#55357;&amp;#56838;&amp;#55357;&amp;#56846;&amp;#55357;&amp;#56838;&amp;#55357;&amp;#56843;&amp;#55357;&amp;#56838;&amp;#55357;&amp;#56843;&amp;#55357;&amp;#56832;&amp;#55357;&amp;#56846;</subject>    

Я вытаскиваю xml с сервера, и мне нужно показать его пользователю.Я заметил, что амперсанд сбежал, и есть суррогатные пары utf-16.Как мне убедиться, что смайлики / смайлики правильно отображаются в браузере.

В настоящее время я просто получаю следующие символы: �������������� вместо настоящих смайликов.

Я ищу простой способ исправить это без каких-либо внешних библиотек или какого-либо стороннего кода, если это возможно, просто старого javascript, html или css.

1 Ответ

0 голосов
/ 10 октября 2018

Вы можете преобразовать кодовые единицы UTF-16, включая суррогаты, в строку JavaScript с помощью String.fromCharCode.Следующий фрагмент кода должен дать вам представление.

var str = '&amp;#55357;&amp;#56898;ABC&amp;#55357;&amp;#56838;&amp;#55357;&amp;#56846;&amp;#55357;&amp;#56838;&amp;#55357;&amp;#56843;&amp;#55357;&amp;#56838;&amp;#55357;&amp;#56843;&amp;#55357;&amp;#56832;&amp;#55357;&amp;#56846;';

// Regex matching either a surrogate or a character.
var re = /&amp;#(\d+);|([^&])/g;
var match;
var charCodes = [];

// Find successive matches
while (match = re.exec(str)) {
  if (match[1] != null) {
    // Surrogate
    charCodes.push(match[1]);
  }
  else {
    // Unescaped character (assuming the code point is below 0x10000),
    charCodes.push(match[2].charCodeAt(0));
  }
}

// Create string from UTF-16 code units.
var result = String.fromCharCode.apply(null, charCodes);
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...