【问题标题】:Encoding emoji in Erlang在 Erlang 中编码表情符号
【发布时间】:2014-03-05 20:37:16
【问题描述】:

假设我有一个二进制文件

Message = <<"string containing emoji">>.

如何正确编码为 Unicode?我试着做:

Encoded = <<Message/utf16>>.

编译文件时收到此警告:

警告:二进制构造将失败并出现“badarg”异常 (utf8/utf16/utf32 段中的 Unicode 代码点无效)

我也用 /utf8 试过这个。同样的警告。

【问题讨论】:

标签: unicode erlang emoji


【解决方案1】:

假设您开始使用的二进制文件是根据 UTF-8 编码的,并且您需要将其编码为 little-endian UTF-16,这应该可以:

unicode:characters_to_binary(<<"string containing emoji">>, utf8, {utf16, little})

更多信息请参见the documentation for the Unicode module

&lt;&lt;Message/utf16&gt;&gt; 失败的原因是位语法中的utf8utf16utf32 说明符编码单个代码点,而不是整个字符串。所以要编码字符U+1F64C,你可以使用:

2> <<16#1f64c/utf8>>.
<<240,159,153,140>>
3> <<16#1f64c/utf16>>.
<<"\330=\336L">>
4> <<16#1f64c/utf32>>.
<<0,1,246,76>>

【讨论】:

    【解决方案2】:

    您可能需要在模块的第一行添加-*- coding: utf8 -*-,并使用/utf8。

    我的猜测是您使用的是 Erlang/OTP

    【讨论】:

      猜你喜欢
      • 2012-03-28
      • 1970-01-01
      • 2017-10-28
      • 2023-03-04
      • 1970-01-01
      • 2018-01-09
      • 2014-09-24
      • 2016-12-11
      • 2018-04-14
      相关资源
      最近更新 更多