在Erlang中编码表情符号

时间:2014-03-05 04:27:38

标签: unicode erlang emoji

假设我有一个二进制文件

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

如何在Unicode中正确编码?我试过了:

Encoded = <<Message/utf16>>.

编译文件时收到此警告:

  

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

我也尝试使用/ utf8。同样的警告。

2 个答案:

答案 0 :(得分:1)

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

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

有关详细信息,请参阅the documentation for the Unicode module

<<Message/utf16>>失败的原因是位语法中的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>>

答案 1 :(得分:0)

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

我的猜测是你正在使用Erlang / OTP&lt; 17,除非另有说明,否则意味着文件被视为latin-1。