2

私は、将来的に国際化のサポートが必要になるプロジェクトに取り組んでいます。UTF のサポートを開始したいのですが、Erlang で UTF を処理するためのベスト プラクティスは何ですか?

私の現在の調査によると、Erlang のビルトイン文字列処理にはいくつかの問題があるようです (JSON 解析が良い例です)。

私はStarlingを調べていて、最近 (どこかで) 読んだところ、UTF 'standard' として標準の Erlang リリースに組み込まれる可能性があります。これは本当ですか?私が見るべき他のライブラリやアプローチはありますか?

コメントから:

EEP (Erlang Enhancement Proposal) 10 詳細Erlang で Unicode 文字を表現する

4

2 に答える 2

5

このページ:

http://erlang.org/doc/highlights.html

...リリース 5.7/OTP R13A のハイライトをリストします。この一節に注意してください。

1.2 ユニコードのサポート

Unicode のサポートは、EEP10 で説明されているように実装されています。端末とファイルの両方からの Unicode データのフォーマットと読み取りは、io および io_lib モジュールによってサポートされています。ファイルは、さまざまな Unicode 形式との間の自動変換を行うモードで開くことができます。モジュール 'unicode' には、外部と内部の Unicode フォーマット間の変換のための関数が含まれており、re モジュールは unicode データをサポートしています。ISO-latin-1 の範囲を超える文字列および文字データを指定するための言語構文もあります。

ベスト プラクティスとは何かについて明言するのは好きではありませんが、一般化を開始するための最小限の完全な例があると役立つことがよくあります。これは、utf を erlang アプリケーションに取り込み、それを別のコンテキストに再度送信する例です。utf8 文字を含むテーブルに行フィールドを持つ MySql データベースがあると仮定すると、それを取り出して json として Web ブラウザーにパイプする 1 つの方法を次に示します。

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

次に、Web ページ (または MozRepl などのより便利なもの) で次を実行します。

var req = new XMLHttpRequest;
req.open('GET', "http://localhost:8000", false);
req.send(null);
eval("(" + req.responseText + ")");
于 2009-09-02T07:56:10.793 に答える
0

前の投稿者が言及したように、erlang の最新リリースは utf をネイティブにサポートしています。ただし、最新のものを使用できない場合、私が通常行うことの 1 つは、文字列データにバイナリを使用することです。erlang がリスト内のバイトをマングリングするのを防ぎます。文字列のリストを扱いやすくするという副作用もあります。

于 2009-09-06T01:56:53.263 に答える