当数据包含非ascii数据时,我尝试通过灯泡将数据添加到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'所有字符串对象都保存为unicode的Neo4J docs 状态,那么为什么不接受我的unicode数据呢?我希望我只是错过了一些愚蠢的东西。
发布于 2013-11-11 12:24:51
是的,这是个窃听器。它用灯泡固定: 0.3.23:
https://github.com/espeed/bulbs/commit/7f104cdbc30f27ea76b036cfa0d0a694f074153e
发布于 2013-11-07 23:53:17
在Python和unicode上刷新了自己之后,我解决了这个问题,不过只能通过尝试、捕捉并将问题数据编码到'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上尝试过这一点,任何一个人都有什么需要解决的吗?
https://stackoverflow.com/questions/19824952
复制相似问题