2009-08-31 6 views
2

私はトラックの下で国際化のサポートを必要とするプロジェクトに取り組んでいます。私はUTFサポートで右足を始めたいと思っています。私はErlangでUTFを処理するためのベストプラクティスは何か疑問に思っていましたか?Erlangの文字列 - 私はどのようなライブラリとテクニックを調べるべきですか?

私の現在の研究から、Erlangのいくつかのユースケース(JSON解析は良い例です)のための文字列処理に組み込まれている問題がいくつかあるようです。

私はStarlingを見て、最近(おそらくどこか)、UTFの標準としてErlangの標準リリースに巻き込まれる可能性があると読んでいます。これは本当ですか?私が見なければならない他の図書館やアプローチはありますか?コメントから

EEP(アーラン強化案)10の詳細Representing Unicode characters in Erlang

+0

Mochijson2をエンコードし、UTF8でJSONをデコードする... – mwt

+0

はまた、あなたは標準ライブラリのUnicodeモジュールを認識していますか? – mwt

+2

EEP 10は受け入れられたとマークされているようです。 Starlingとの関係がわからない場合は... – Zed

答えて

5

このページ:

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

... 5.7/OTP R13Aを解放するhightlightsを示しています。この一節に注意してください:Unicodeの

1.2 Unicodeのサポート

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

私はベストプラクティスについての宣言をしたくありませんが、一般化を始めるための最小限の完全な例を持つことが役立つことがよくあります。ここでは、utlをerlangアプリケーションに変換し、もう一度別のコンテキストに送信します。それが見えるよう

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:あなたがUTF8の文字を含むテーブルの行フィールドでMySQLデータベースを持っていたと仮定すると、ここでそれを取得し、パイプそれJSONなどのWebブラウザにする一つの方法ですこのように:

-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 + ")"); 
0

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

関連する問題