unicode - UTF-8 二进制文件必须在 Erlang 的二进制文字中包含/utf8 吗?

标签 unicode encoding utf-8 binary erlang

在erlang中,定义UTF-8二进制字符串时,需要在二进制文字中指定编码,如下所示:

Star = <<"★"/utf8>>.
> <<226,152,133>>
io:format("~ts~n", [Star]).
> ★
> ok

但是,如果 /utf8 encoding 被省略,unicode 字符处理不正确:
Star1 = <<"★">>.
> <<5>>
io:format("~ts~n", [Star1]).
> ^E
> ok

有没有一种方法可以创建这样的文字二进制字符串而无需指定 /utf8在我创建的每个二进制文件中?我的代码有很多这样的二进制文件,事情变得非常困惑。有没有办法为二进制文件设置某种默认编码?

最佳答案

这可能是 Erlang 字符串和列表的歧义的结果。当您输入 <<"★">> , Erlang 实际看到的是 <<[9733]>> ,当然,这只是一个包含整数的列表。因此,我相信在这种情况下,Erlang 会将 9733 编码为一个整数,很可能是 16 位(尽管我肯定会错)。
/utf8 flag 向 Erlang 表明这应该是一个 UTF8 字符串,从而向 VM 提示如何最好地编码它遇到的整数。

关于unicode - UTF-8 二进制文件必须在 Erlang 的二进制文字中包含/utf8 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24315971/

相关文章:

c++ - 确定字节数组是否包含 ANSI 或 Unicode 字符串?

CSS :before superscript "6"?

python - 使用 HTMLParser 解析 unicode 时出错

c++ - C++ 上的 UNICODE (fread) 读取文件错误

C# - 为 Roman8 字符集创建自己的编码

javascript - 删除javascript中的全 Angular 和半 Angular 字符

encoding - Active Directory 中 unicodePwd 的正确编码

java - 如何正确计算字符串字节数?

尝试从 SFTP 服务器流式传输文件时出现 Python Paramiko UTF-8 错误

php - 如何处理数据库中的重音符号和奇怪的字符?