2

我希望将此字符串解析为 iOS 的 VOIP 通知为二进制字符串:

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

我预计 Erlang shell 上打印的数据是:

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

但是打印出来的时候显示:

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

我尝试了Encoding emoji in Erlang的解决方案,但它只是给了我一些表情符号字符串,即:

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

如何在 Erlang shell 中以 Unicode 正确显示它?

4

1 回答 1

2

在您提供的第一个示例中,它已正确编码,但未正确显示。当您使用双引号定义字符串时,字符串实际上存储为字符代码列表。在心脏表情符号的情况下[10084,65039]是字符代码。Erlang shell 不会打印出表情符号本身,而是打印出代表表情符号的字节值。

在第二种情况下,二进制字符串,您不需要对二进制进行任何特殊编码,但您需要告诉 Erlang 将其视为 UTF8 字符串。您可以通过/utf8在结束前最后指定来做到这一点>>

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

如果您想将存储在字符串和二进制文件中的表情符号作为实际表情符号而不是字符代码显示在 shell 中,则需要+pc在启动 shell 时使用该选项,以便它将所有 unicode 字符视为可打印字符:

erl +pc unicode

将其设置为unicode将导致在 shell 中打印表情符号,如下所示:

带有 unicode 的 erlang erl shell 表情符号

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

于 2017-12-06T14:25:46.367 回答