unicode – 必须UTF-8二进制文件在Erlang的二进制文字中包含/ 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提供有关如何最好地对其遇到的整数进行编码的提示.

点赞