假设我有一个二进制文件
Message = <<"string containing emoji">>.
如何在Unicode中正确编码?我试过了:
Encoded = <<Message/utf16>>.
编译文件时收到此警告:
警告:二进制构造将失败并出现'badarg'异常 (utf8 / utf16 / utf32段中的Unicode代码点无效)
我也尝试使用/ utf8。同样的警告。
答案 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>>
失败的原因是位语法中的utf8
,utf16
和utf32
说明符编码单个代码点,而不是整个字符串。因此,要对字符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。