美文网首页
中文处理

中文处理

作者: kyo1992 | 来源:发表于2020-07-06 10:25 被阅读0次

    从几个例子说说 Erlang 如何处理中文.

    知识介绍:
    Unicode与UTF-8的区别,简单来说,Unicode是一个码表,UTF-8是Unicode编码的一种表示方法。
    https://blog.csdn.net/wangzhen_andy/article/details/53493939?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

    改名:

    1. 客户端发送一个改名请求, 新的名字Name,编码是utf-8.
    2. 通过协议解析到该字段后,从binary格式转换成list格式(binary_to_list), Name的内容依然是utf-8,格式是<< >>.
    3. 要在erlang控制台输出该中文,可以使用
      io:format("~ts", [Name]).
    4. 保存该中文到数据库,直接保存即可,不用对该数据做格式转换. (<< >> or [] 格式都可以,只要数据内容是utf-8即可), 数据库即可显示该中文.
    5. 此时再次从数据库读出名字字段,使用 io:format("~p",Name), 打印, 可见是一个<<>>格式的utf-8数据.

    源文件中硬编码中文:

    1. 一些配置文件中会硬编码中文,那么需要把中文字符转换成erlang能识别的utf-8数据, 使用函数 unicode:characters_to_binary(CnStr) 进行转换即可, 此时把转换后的字符串(格式为<<>>保存到数据库,依然是源文件中的硬编码中文.

    通过post上传json数据到指定后台:

    数据内容需要是utf-8,数据格式是binary,所以使用
    使用函数 unicode:characters_to_binary(CnStr) 进行转换即可.

    输出中文到文本文件:

    数据内容需要是utf-8即可, 格式可以是<<>> or list, 所以使用
    使用函数 unicode:characters_to_binary(CnStr) 进行转换即可.

    字符串连接和输出:

    将两个硬编码中文连接,
    A = "哈哈".
    B = "呵呵".
    Concat = lists:concat(A,B).
    Utf8Cn = unicode:characters_to_binary(Concat).
    io:format("~ts", Utf8Cn).

    求出指定中文字符串长度:

    A = "哈哈".
    B = unicode:characters_to_list(A).
    Length = length(xmerl_ucs:to_unicode(A,'utf-8'). (Length = 2).
    将utf-8编码的字符串转成对应在unicode码表中的码, 一个中文字符就是一个码,
    所以直接用length获取转换后的list长度即可.

    相关文章

      网友评论

          本文标题:中文处理

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