Кодирование и декодирование эмодзи 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 будет вызывать эмодзи, напечатанные в оболочке, как это:

erlang erl shell эмодзи с юникодом

http://erlang.org/doc/man/erl.html

Другие вопросы по тегам