【问题标题】:yaws unicode symbols in {html, ...}{html, ...} 中的 yaws unicode 符号
【发布时间】:2012-03-19 19:04:45
【问题描述】:

为什么 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] 之类的网页列表,但它崩溃了。

【问题讨论】:

    标签: unicode erlang yaws


    【解决方案1】:

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

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

    请参阅http://www.erlang.org/doc/apps/stdlib/unicode_usage.html 了解更多信息。

    【讨论】:

      【解决方案2】:

      您必须执行以下操作才能使其工作:

      {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]
      

      【讨论】:

        猜你喜欢
        • 2010-12-14
        • 2020-07-23
        • 2011-06-29
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-21
        相关资源
        最近更新 更多