1

カウチデータベースでドキュメントを作成すると、次のエラーが発生します。

12> ADoc.
[{<<"Adress">>,<<"Hjalmar Brantingsgatan 7 C">>},
 {<<"District">>,<<"Brämaregården">>},
 {<<"Rent">>,3964},
 {<<"Rooms">>,2},
 {<<"Area">>,0}]
13> IDoc.
[{<<"Adress">>,<<"Segeparksgatan 2A">>},
 {<<"District">>,<<"Kirseberg">>},
 {<<"Rent">>,9701},
 {<<"Rooms">>,3},
 {<<"Area">>,83}]
14> erlang_couchdb:create_document({"127.0.0.1", 5984}, "proto_v1", IDoc).
{json,{struct,[{<<"ok">>,true},
           {<<"id">>,<<"c6d96b5f923f50bfb9263638d4167b1e">>},
           {<<"rev">>,<<"1-0d17a3416d50129328f632fd5cfa1d90">>}]}}
15> erlang_couchdb:create_document({"127.0.0.1", 5984}, "proto_v1", ADoc).
** exception exit: {ucs,{bad_utf8_character_code}}
     in function  xmerl_ucs:from_utf8/1 (xmerl_ucs.erl, line 185)
     in call from mochijson2:json_encode_string/2 (/Users/admin/AlphaGroup/src/mochijson2.erl, line 200)
 in call from mochijson2:'-json_encode_proplist/2-fun-0-'/3 (/Users/admin/AlphaGroup/src/mochijson2.erl, line 181)
 in call from lists:foldl/3 (lists.erl, line 1197)
 in call from mochijson2:json_encode_proplist/2 (/Users/admin/AlphaGroup/src/mochijson2.erl, line 184)
 in call from erlang_couchdb:create_document/3 (/Users/admin/AlphaGroup/src/erlang_couchdb.erl, line 256)

上記の 2 つのドキュメントのうち 1 つは、問題なく (IDoc)、couchdb で作成できます。

それが引き起こされた理由を理解するのを手伝ってくれる人はいますか?

4

2 に答える 2

2

問題は <<"Brämaregården">> にあると思います。最初にユニコードをバイナリに変換する必要があります。例は次のリンクにあります。

ユニコードの議論。コア機能はユニコードです

于 2012-11-22T22:07:51.570 に答える
0

Erlang コードに非 ASCII 文字を入力するのは面倒です。これは、コンパイルされた Erlang コードとシェルでの動作が異なるためです。

バイナリを UTF-8 として明示的に入力してみてください。

<<"Br", 16#c3, 16#a4, "mareg", 16#c3, 16#a5, "rden">>

つまり、「ä」は UTF-8 のバイト C3 A4 で表され、「å」は C3 A5 で表されます。これらのコードを見つける方法はたくさんあります。クイック検索でこの表が見つかりました。

通常、コードの外部のどこかから入力を取得します。たとえば、ファイルからの読み取り、Web フォームへの入力などで、この問題は発生しません。

于 2012-11-23T11:37:13.630 に答える