2

为什么 yaws-page 中的 {html, "доуч"++[1076,1086,1091,1095]} 给了我下一个错误:

Yaws process died: {badarg,[{erlang,list_to_binary,
                                    [[[[208,180,208,190,209,131,209,135,1076,
                                        1086,1091,1095]],
                                        ...

“доуч” = [1076,1086,1091,1095] -> 给了我完全匹配,但是偏航如何将每个元素列表的 2 字节转换为两倍长的列表,每个元素 1 字节用于“доуч”,但不这样做[1076,1086,1091,1095]。是否有一些涉及的 ​​unicode 数据的内部表示?

我想输出到 [1076,1086,1091,1095] 之类的网页列表,但它被粉碎了。

4

2 回答 2

1

Erlang 源文件仅支持 ISO-LATIN-1 字符集。Erlang 控制台可以接受 Unicode 字符,但是要将它们输入到源代码文件中,您需要使用以下语法:

K = "A weird K: \x{a740}".

有关更多信息,请参阅http://www.erlang.org/doc/apps/stdlib/unicode_usage.html

于 2012-03-01T11:02:34.157 回答
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]
于 2012-03-02T03:06:26.080 回答