转载:http://blog.csdn.net/minyskirt/article/details/5291494
在Erlang的老版本中,是不支持Unicode(utf8)字符的,不过幸运的是在R13版本上,已经提供支持了。有兴趣的朋友可以在http://erlang-china.org/misc/erlang_r13_unicode.html找到示例。
自然,由于之前的Erlang版本没有提供unicode的支持,所以在利用ErlyWeb开发Web应用时处理中文字符的输入,就变得是一件很复杂的事情,虽然可以从MySQL数据库中读取中文字符。
下面就是在利用ErlyWeb处理中文字符中需要注意的地方:
1)、MySQL数据库的字符编码设置为unicode。
2)、每个html页面的字符编码都要设置为utf-8,在<head/>标签中增加<Meta http-equiv=”Content-Type” Content=”text/html; Charset=utf-8″>
3)、利用erlydb链接MySQL数据库中,需要增加字符编码参数,比如:erlydb:start(mysql,[{hostname,"localhost"},{username,"root"},{password,"123456"},{database,"blog"},{encoding,utf8}]).,如果直接用Erlang的MySQL驱动链接数据库,则可以这样:mysql:start_link(p1,"localhost",3306,"root","123456","blog",undefined,utf8).
4)、在讲中文字符写入数据库时,现把中文字符的列表转换为二进制。比如中文字符"王",利用yaws_api:parse_post获取到的对应的值是一个列表[231,142,139],而列表中的值正好是字符"王"的二进制,所以需要用iolist_to_binary/1或者list_to_binary/1函数转换成二进制<<231,142,139>>,
最后把转换后的二进制值赋值给对应的字段即可。
下面的代码是一个功能简单的新增数据到数据库表的代码,可以参照:
1)、insert_controller.erl
-module(insert_controller).
-compile(export_all).
index(A) ->
case yaws_arg:method(A) of
'POST' ->
Params = yaws_api:parse_post(A),
{[FirstName,LastName,Email],Errors} = erlyweb_forms:validate(Params,["firstname","lastname","email"],fun validate/2),
if Errors =/= [] ->
{data, {FirstName,LastName,Email,Errors}};
true ->
register_usr(FirstName, LastName, Email),
{ewr, show}
end;
_ ->
{data, {[],[],[],[]}}
end.
validate(Name, Val) ->
case Name of
"firstname" ->
if Val == [] ->
{error, {missing_field, "firstname"}};
true ->
ok
end;
"lastname" ->
if Val == [] ->
{error, {missing_field, "lastname"}};
true ->
ok
end;
"email" ->
if Val == [] ->
{error, {missing_field, "email"}};
true ->
ok
end;
_ ->
ok
end.
register_usr(FirstName, LastName, Email) ->
First_Name = iolist_to_binary (FirstName),
Last_Name = iolist_to_binary (LastName),
%io:format("~p~n",[FirstName]),
%io:format("~p~n",[First_Name]),
Author = author:new_with([{first_name,First_Name},{last_name,Last_Name},{email,Email}]),
author:save(Author).
2)、insert_view.et
<%@ index({FirstName,LastName,Email,Errs1}) %>
<% test_messages:show_errs(Errs1) %>
<form action="insert" method="post">
<div>FirstName</div>
<div><input name="firstname" id="firstname" value="<%FirstName%>"/></div>
<div>LastName</div>
<div><input name="lastname" id="lastname" value="<%LastName%>"/></div>
<div>Email</div>
<div><input name="email" id="email" value="<%Email%>"/></div>
<div><input type="submit" value="insert"/> </div>
</form>