Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang 如何从R16B升级到17?如果里面有汉字,请列出\u到\u的二进制分隔符_Erlang - Fatal编程技术网

Erlang 如何从R16B升级到17?如果里面有汉字,请列出\u到\u的二进制分隔符

Erlang 如何从R16B升级到17?如果里面有汉字,请列出\u到\u的二进制分隔符,erlang,Erlang,我们正在使用R16B03-1并尝试升级到R17 iolist\u to\u binary和list\u to\u binary如果里面有汉字,则会中断 我在谷歌上搜索并找到了以下链接来解释这个问题 Erlang文件的默认编码已从ISO-8859-1更改为UTF-8。XML文件的编码也已更改为UTF-8 只有当字符串包含

我们正在使用R16B03-1并尝试升级到R17

iolist\u to\u binary
list\u to\u binary
如果里面有汉字,则会中断

我在谷歌上搜索并找到了以下链接来解释这个问题

  • Erlang文件的默认编码已从ISO-8859-1更改为UTF-8。XML文件的编码也已更改为UTF-8

  • 只有当字符串包含<256个代码点时,才能使用erlang:iolist_to_binary/1将其直接转换为二进制,或直接发送到端口。如果字符串包含大于255的Unicode字符,则必须确定编码,并且应使用Unicode:characters_to_binary/{1,2,3}将字符串转换为首选编码中的二进制。字符串通常不是字节列表,就像Erlang/OTP R13之前一样。它们是字符列表。字符通常不是字节,而是Unicode代码点

    我的问题是我们必须将所有
    列表\u修改为\u二进制
    unicode:characters\u到\u二进制

    从以下链接中感谢

    除二进制文件中表示码点或UTF-8的整数以外的其他Unicode编码称为“外部编码”。ISO-latin-1编码是二进制文件,列表称为latin1编码

    建议仅在需要时使用外部编码与外部实体进行通信。在Erlang/OTP环境中工作时,建议在表示Unicode字符时将二进制文件保留为UTF-8格式

    不需要在所有位置将列表\u到\u二进制修改为unicode:字符\u到\u二进制。只有那些需要与外部世界接口的地方才需要它,并且您不确定字符串是否用utf8表示(或者您确定编码不是utf8)。转换后,可以使用标准BIF

    示例:如果列表中有字符[52974]。
    列出二进制([52974])。
    给出错误的参数异常错误。 但一旦你做了

    A=unicode:字符到二进制([52974],utf8)。
    

    在上述转换之后,您可以使用内置函数,这些函数在您的业务逻辑中更快

    B = binary_to_list(A).
    "컮"
    list_to_binary(B).
    <<"컮">>
    
    B=二进制列表(A)。
    "컮"
    列出\u到\u二进制(B)。