Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Erlang中的字符串-我应该检查哪些库和技术?_String_Erlang_Utf - Fatal编程技术网

String Erlang中的字符串-我应该检查哪些库和技术?

String Erlang中的字符串-我应该检查哪些库和技术?,string,erlang,utf,String,Erlang,Utf,我正在从事一个需要国际化支持的项目。我想从UTF支持开始,我想知道在Erlang中处理UTF的最佳实践是什么 从我目前的研究来看,对于某些用例来说,Erlang的内置字符串处理似乎存在一些问题(JSON解析就是一个很好的例子) 我最近一直在关注并阅读(某个地方),它可能会作为UTF“标准版”加入到标准的Erlang版本中。这是真的吗?是否有其他库或方法我应该看 从评论中: EEP(Erlang增强方案)10详细信息本页: …列出了5.7版/OTP R13A的高亮度。注意这一段: 1.2 Uni

我正在从事一个需要国际化支持的项目。我想从UTF支持开始,我想知道在Erlang中处理UTF的最佳实践是什么

从我目前的研究来看,对于某些用例来说,Erlang的内置字符串处理似乎存在一些问题(JSON解析就是一个很好的例子)

我最近一直在关注并阅读(某个地方),它可能会作为UTF“标准版”加入到标准的Erlang版本中。这是真的吗?是否有其他库或方法我应该看

从评论中:

EEP(Erlang增强方案)10详细信息本页:

…列出了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):


正如前面的海报所提到的,erlang的最新版本本机支持utf。如果您不能使用最新版本,那么我通常会使用二进制文件作为字符串数据。它可以防止erlang损坏列表中的字节。它的副作用是使字符串列表更易于处理。

Mochijson2用utf8编码和解码json……另外,您知道标准库中的unicode模块吗?EEP 10似乎被标记为已接受。不确定它是否与Starling有任何关系……我没有逐字阅读整个eep,但建议的api似乎是在当前erlang版本的unicode模块中实现的api。
var req = new XMLHttpRequest;
req.open('GET', "http://localhost:8000", false);
req.send(null);
eval("(" + req.responseText + ")");