Не удалось правильно объявить и отобразить символ UTF-8 в JSON - PullRequest
1 голос
/ 29 января 2020

У меня есть объект JSON, в котором один атрибут содержит специальный символ c - https://www.compart.com/en/unicode/U+1F514

Я пытался сохранить обе строки в кодировке UTF-8 "\xF0\x9F\x94\x94" или попытался напечатать его, используя его шестнадцатеричное значение - String.fromCharCode(0x1F514) или десятичное значение String.fromCharCode(128276) Но все это приводит к пустому символу / пустому квадратному символу в Google Chrome.

Как я могу правильно сохранить этот символ, статически в простом JSON {header1:"____"}, а затем повторить его?

Также не удалось отобразить его в IntelliJ - поэтому, если у вас есть комментарий по поводу этой проблемы, был бы очень благодарен.

Ответы [ 2 ]

2 голосов
/ 29 января 2020

По историческим причинам JavaScript не имеет полной поддержки Unicode, потому что создатели языка предполагали, что UTF-16 никогда не потребуется больше 2 байтов для кодирования одного символа. JSON наследует это, а \u сущности принимают только 4 шестнадцатеричных символа.

Необходимо использовать обходной путь, который в основном состоит в разделении фактического 4-байтового символа UTF-16 на два 2-байтовых символа, как в:

var raw = "?";
var doesNotWork = "\u1F514";
var works = "\uD83D\uDD14";
console.log(raw, doesNotWork, works);

... или избавьтесь от сущностей и просто сбросьте текущий двоичный символ:

var data = ["?"];
var json = JSON.stringify(data);
console.log(json, JSON.parse(json));
1 голос
/ 29 января 2020

Я думаю, что проблема в том, что шрифт не поддерживает такой символ, поэтому рисуется квадратный символ. Если не указана конкретная c причина, по которой вы используете этот символ, вы можете нарисовать его значком или использовать символ в шрифте значков.

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