在Erlang中,UTF-8二进制文件必须包含/utf8



在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一个关于如何最好地编码它遇到的整数的提示。

最新更新