Кодирование и декодирование эмодзи erlang из списка в двоичный файл

Я хочу, чтобы эта строка анализировалась для уведомления VOIP для iOS в двоичной строке:

"{\"data\":{\"text\":\"❤️\"}}"

Я ожидал, что данные, напечатанные в оболочке Erlang, будут такими:

<<"{\"data\":{\"text\":\"❤️\"}}">>

Но при печати показывает:

{"data",[{"text",[10084,65039]}]}

Я попробовал решение из Кодирование emoji в Erlang, но оно просто дает мне битовую строку emoji который:

{<<"data">>,{[{<<"text">>,<<100,39,15,254>>}]}}

Как мне правильно показать это в Unicode в оболочке Erlang?


person Sohail Germanwala    schedule 06.12.2017    source источник
comment
Вроде кодируется правильно. Вы говорите, что он неправильно закодирован или отображается неправильно?   -  person Stratus3D    schedule 06.12.2017


Ответы (1)


В первом примере, который вы предоставляете, он правильно закодирован, но не отображается должным образом. Когда вы определяете строки с помощью двойных кавычек, строка фактически сохраняется в виде списка кодов символов. В случае эмодзи-сердечка [10084,65039] — это коды символов. Оболочка Erlang распечатывает не сам смайлик, а значения байтов, представляющих смайлик.

Во втором случае, двоичной строке, вам не нужно делать какую-либо специальную кодировку двоичного файла, но вам нужно будет указать Erlang, чтобы он обрабатывал ее как строку UTF8. Вы можете сделать это, указав /utf8 в конце перед закрывающим >>:

<<"{\"data\":{\"text\":\"❤️\"}}"/utf8>>.

Если вы хотите, чтобы смайлики, хранящиеся в строках и двоичных файлах, подобные этим, отображались в оболочке как настоящие смайлики, а не как коды символов, вам нужно будет использовать параметр +pc при запуске оболочки, чтобы он обрабатывал все символы Юникода как печатные символы:

erl +pc unicode

Установка его на unicode приведет к тому, что смайлики будут напечатаны в оболочке следующим образом:

erlang erl shell emoji with unicode

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

person Stratus3D    schedule 06.12.2017