本页:
http://erlang.org/doc/highlights.html
...列出 5.7/OTP R13A 版的亮点。注意这段话:
1.2 Unicode 支持
对 Unicode 的支持被实现为
在 EEP10 中描述。格式化和
从以下位置读取 unicode 数据
终端和文件由
io 和 io_lib 模块。文件可以
以自动模式打开
不同的翻译
Unicode 格式。模块“unicode”
包含转换函数
在外部和内部 unicode 之间
格式和 re 模块支持
对于 unicode 数据。还有
指定字符串的语言语法
和超出的字符数据
ISO-latin-1 范围。
我不喜欢就什么是最佳实践发表声明,但我经常发现有一个最小的、完整的例子来开始概括是有帮助的。这是将 utf 放入 erlang 应用程序并将其再次发送到不同上下文的方法之一。假设您有一个 MySql 数据库,其中包含 utf8 字符的表中的行字段,这是一种将其作为 json 输出并通过管道传输到 Web 浏览器的方法:
hg clone http://bitbucket.org/justin/webmachine/ webmachine-read-only
cd webmachine-read-only
make
./scripts/new_webmachine.erl mywebdemo /tmp
svn checkout http://erlang-mysql-driver.googlecode.com/svn/trunk/ erlang-mysql-driver-read-only
cd erlang-mysql-driver-read-only/src
cp * /tmp/mywebdemo/src
svn checkout http://mochiweb.googlecode.com/svn/trunk/ mochiweb-read-only
cp mochiweb-read-only/src/mochijson2.erl /tmp/mywebdemo/src
cd /tmp/mywebdemo
编辑 src/mywebdemo_resource.erl 使其看起来像这样:
-module(mywebdemo_resource).
-export([init/1, to_html/2]).
-include_lib("webmachine/include/webmachine.hrl").
init([]) -> {ok, undefined}.
to_html(ReqData, State) ->
mysql:start_link(pool_id, "database.host.com", 3306, "db_user", "db_password", "db_name", fun(A, B, C, D) -> ouch end, utf8), %% add your connection string info
{data, Res} = mysql:fetch(pool_id, "select * from table where IdWhatever = 13"),
[[_, Utf8Str, _]] = mysql:get_result_rows(Res), %% pattern will need to be altered to match your table structure
{mochijson2:encode({struct, [{Utf8Str, 100}]}), ReqData, State}.
构建一切并启动 url 调度程序:
make
./start.sh
然后在网页中执行以下命令(或者更方便的东西,比如 MozRepl):
var req = new XMLHttpRequest;
req.open('GET', "http://localhost:8000", false);
req.send(null);
eval("(" + req.responseText + ")");