2

データに非 ASCII データが含まれている場合、Bulbs を介して Neo4J にデータを追加しようとすると、Unicode エラーが発生します。

次のコードは失敗します。

from bulbs.model import Node
from bulbs.property import String
from bulbs.neo4jserver import Graph

class User(Node):
    element_type="user"
    name = String(nullable=False)

g = Graph()
g.add_proxy("users", User)

user_data = {u'name': u'Aname M\xf6ller'}

g.users.create(**user_data)

とともにUnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 7: ordinal not in range(128)

bulbs.utils.uを介して、関数でエラーが発生していますcodecs.unicode_escape_decode()

うまくいけば関連する情報:

$>python -V
'2.7.3'

>>>type(user_data['name'])
type('unicode')

>>>import bulbs
>>>bulbs.__version__
'0.3'

Neo4J ドキュメントには、すべての String オブジェクトが Unicode として保存されると記載されていますが、Unicode データが受け入れられないのはなぜですか? ばかげた何かが欠けていることを願っています。

4

2 に答える 2

1

Python と Unicode でリフレッシュした後、問題を回避しましたが、問題の行を try、catch でラップし、問題のデータを 'utf-8' にエンコードするだけでした。最もエレガントな解決策ではありませんが、次のコードは私にとってはうまくいっているようです。

from bulbs.model import Node
from bulbs.property import String
from bulbs.neo4jserver import Graph

class User(Node):
    element_type="user"
    name = String(nullable=False)

g = Graph()
g.add_proxy("users", User)

user_data = {u'name': u'Aname M\xf6ller'}

try:
    g.users.create(**user_data)
except UnicodeEncodeError:
    for k, v in user_data.iteritems():
        try:
            user_data[k] = unicode.encode(v, 'utf-8')
        except TypeError:
            # Fails for non string values
            pass
    g.users.create(**user_data)

私がこれに持っている唯一の問題。ロガーがアクティブな場合、bulbsへの最初の呼び出しで、トレースバック付きのエラー メッセージがログに記録されます create()。契約を破るわけではありませんが、少し面倒です。

Python 3 でこれを試したことはありません。

于 2013-11-07T23:53:17.613 に答える