美文网首页
erlang中unicode编码的坑

erlang中unicode编码的坑

作者: peheader | 来源:发表于2019-08-01 20:21 被阅读0次

    记得获取unicode 对应的二进制型这样写(这个貌似跟环境有关,使用前用characters_to_binary打印一下看是否能正确编码):

    能正确编码直接用:

    unicode:characters_to_binary("中文"),

    不能正确编码的用下面这句:

    erlang:list_to_binary(unicode:characters_to_list(“中文”)),

    另外附上统计字符(中英文都算一个字符)的方法:

    %% get_utf8_len(Unicode) -> int()

    get_utf8_len(UnicodeStream) ->

    {AsciiNum, Utf8Num} = utf8_len(UnicodeStream,0,0),

    AsciiNum + Utf8Num.

    utf8_len(<<>>,AsciiNum,Utf8Num) -> {AsciiNum,Utf8Num};

    utf8_len(<<H:8,Rest/binary>>,AsciiNum,Utf8Num) when H =< 127 ->utf8_len(Rest,AsciiNum+1,Utf8Num);

    utf8_len(<<H:8,_B:1/binary,Rest/binary>>,AsciiNum,Utf8Num) when H >= 192,H =< 223 -> utf8_len(Rest,AsciiNum,Utf8Num + 1);

    utf8_len(<<H:8,_B:2/binary,Rest/binary>>,AsciiNum,Utf8Num) when H >= 224,H =< 239 -> utf8_len(Rest,AsciiNum,Utf8Num + 1);

    utf8_len(<<H:8,_B:3/binary,Rest/binary>>,AsciiNum,Utf8Num) when H >= 240,H =< 247 -> utf8_len(Rest,AsciiNum,Utf8Num + 1);

    utf8_len(<<H:8,_B:4/binary,Rest/binary>>,AsciiNum,Utf8Num) when H >= 248,H =< 251 -> utf8_len(Rest,AsciiNum,Utf8Num + 1);

    utf8_len(<<H:8,_B:5/binary,Rest/binary>>,AsciiNum,Utf8Num) when H >= 252,H =< 253 -> utf8_len(Rest,AsciiNum,Utf8Num + 1);

    utf8_len(<<_H:8,Rest/binary>>,AsciiNum,Utf8Num) -> utf8_len(Rest,AsciiNum+1,Utf8Num).

    相关文章

      网友评论

          本文标题:erlang中unicode编码的坑

          本文链接:https://www.haomeiwen.com/subject/owthdctx.html