为什么{html,“доуч”++ [1076,1086,1091,1095]}在yaws-page中给出了下一个错误:
Yaws process died: {badarg,[{erlang,list_to_binary,
[[[[208,180,208,190,209,131,209,135,1076,
1086,1091,1095]],
...
“доуч”= [1076,1086,1091,1095] - >给我完全匹配,但yaws如何将每个elem列表中的2个字节转换为两倍长的列表,每个elem 1个字节用于“доуч”,但不适用于[1076,1086,1091,1095]。是否有一些内部重新编写的unicode数据?
我想输出像[1076,1086,1091,1095]这样的网页列表,但它已经粉碎了。
答案 0 :(得分:1)
Erlang源文件仅支持ISO-LATIN-1字符集。 Erlang控制台可以接受Unicode字符,但要在源代码文件中输入它们,您需要使用以下语法:
K = "A weird K: \x{a740}".
有关详细信息,请参阅http://www.erlang.org/doc/apps/stdlib/unicode_usage.html。
答案 1 :(得分:1)
您必须执行以下操作才能使其正常工作:
{html, "доуч"++ binary_to_list(unicode:characters_to_binary([1076,1086,1091,1095]))}
为什么会失败?
更详细一点,list_to_binary
失败了,因为它试图将列表中的每个项目转换为一个字节,这是不可能的,因为[1076,1086,1091,1095]
中的每个值都需要超过一个字节。
发生了什么事?
[1076,1086,1091,1095]
是"доуч"
的纯unicode字符串表示形式。 Yaws尝试使用list_to_binary
直接将字符串(列表)转换为二进制字符串,因此失败。由于每个unicode字符可能需要多个字节,因此我们需要将其转换为字节数组。这可以使用:
unicode:characters_to_binary([1076,1086,1091,1095]).
<<208,180,208,190,209,131,209,135>>
现在可以在列表和二进制表示之间来回安全地转换。有关详细信息,请参阅unicode。
您可以按如下方式转换回unicode:
unicode:characters_to_list(<<208,180,208,190,209,131,209,135>>).
[1076,1086,1091,1095]