在erlang中,定义UTF-8二进制字符串时,我需要在二进制文字中指定编码,如下所示:
Star = <<"★"/utf8>>.
> <<226,152,133>>
io:format("~ts~n", [Star]).
> ★
> ok
但是,如果省略/utf8
编码,则无法正确处理unicode字符:
Star1 = <<"★">>.
> <<5>>
io:format("~ts~n", [Star1]).
> ^E
> ok
是否有一种方法,我可以创建像这样的文字二进制字符串,而不必在我创建的每个二进制中指定/utf8
?我的代码中有很多这样的二进制文件,事情变得相当混乱。有没有办法为二进制文件设置某种默认编码?
这可能是Erlang字符串和列表模棱两可的结果。当你输入<<"★">>
时,Erlang实际上看到的是<<[9733]>>
,当然,它只是一个包含整数的列表。因此,我相信Erlang在这种情况下会将9733编码为一个整数,最有可能是16位(尽管我肯定是错的)。
/utf8
标志向Erlang表明这应该是一个UTF8字符串,从而给VM一个关于如何最好地编码它遇到的整数的提示。