从几个例子说说 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
改名:
- 客户端发送一个改名请求, 新的名字Name,编码是utf-8.
- 通过协议解析到该字段后,从binary格式转换成list格式(binary_to_list), Name的内容依然是utf-8,格式是<< >>.
- 要在erlang控制台输出该中文,可以使用
io:format("~ts", [Name]). - 保存该中文到数据库,直接保存即可,不用对该数据做格式转换. (<< >> or [] 格式都可以,只要数据内容是utf-8即可), 数据库即可显示该中文.
- 此时再次从数据库读出名字字段,使用 io:format("~p",Name), 打印, 可见是一个<<>>格式的utf-8数据.
源文件中硬编码中文:
- 一些配置文件中会硬编码中文,那么需要把中文字符转换成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长度即可.
网友评论