Кодирование и декодирование эмодзи erlang из списка в двоичный файл
Я хочу, чтобы эта строка была проанализирована для VOIP Notification для iOS в двоичную строку:
"{\"data\":{\"text\":\"❤️\"}}"
Я ожидал, что данные, напечатанные на оболочке Эрланга, будут:
<<"{\"data\":{\"text\":\"❤️\"}}">>
Но при печати это показывает:
{"data",[{"text",[10084,65039]}]}
Я попробовал решение из " Кодирования смайликов в Эрланге", но оно просто дает мне немного смайликов:
{<<"data">>,{[{<<"text">>,<<100,39,15,254>>}]}}
Как правильно показать это в Unicode в оболочке Erlang?
1 ответ
В первом примере вы указываете, что он правильно закодирован, но не отображается должным образом. Когда вы определяете строки, используя двойные кавычки, строка фактически сохраняется как список кодов символов. В случае сердца смайликов [10084,65039]
являются кодами символов. Оболочка Erlang печатает не сами эмодзи, а значения байтов, которые представляют смайлики.
Во втором случае, двоичная строка, вам не нужно выполнять какую-либо специальную кодировку двоичного файла, но вам нужно будет сказать Эрлангу, чтобы она воспринималась как строка UTF8. Вы можете сделать это, указав /utf8
в конце до закрытия >>
:
<<"{\"data\":{\"text\":\"❤️\"}}"/utf8>>.
Если вы хотите, чтобы смайлики, хранящиеся в строках и двоичных файлах, подобные этим, отображались в оболочке как настоящие смайлики, а не коды символов, вам необходимо использовать +pc
опция при запуске оболочки, поэтому она обрабатывает все символы Юникода как печатные символы:
erl +pc unicode
Установка его в unicode
будет вызывать эмодзи, напечатанные в оболочке, как это: