Как кодировать последовательность Unicode, например "\ u00c3 \ u00a7"? - PullRequest
0 голосов
/ 14 мая 2019

Я получил строку ведьмы, содержащую последовательность Юникода, такую ​​как "\ u00c3 \ u00a7", ведьма должна отображаться как "ç", но я получил это "ç§"

Данные получены из экспорта из Facebook в Json.

Для этой темы есть соответствующая запись ( Facebook JSON, плохо закодированный ), и я пытался кодировать / декодировать с помощью iconv, но безуспешно!

Спасибо!

Кодирование / Декодирование с / на латиницу1 до utf8:

iconv.decode(iconv.encode(str, 'latin1'), 'utf8');

Заменить \ u ...:

 str.replace(/\\u([\d\w]{4})/gi, function (match, grp) {
     return String.fromCharCode(parseInt(grp, 16));
 });

Я также пробовал с encodeURIComponent:

 encodeURIComponent(stringWithUnicode);

1 Ответ

0 голосов
/ 14 мая 2019

Честно говоря, я ничего не знаю об этом, но я заметил, что побитовое ИЛИ (|) двух байтов выдает правильный символ, если вы отправите эту строку юникода в функцию ниже, вы получите правильный результат:

function getExtended(uc){
    var bytes = uc.split("\\u").filter(v => v.length).map(v => parseInt(v, 16));
    return String.fromCharCode(bytes[0] | bytes[1]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...