正确处理strunicode的Python保存序列化?

问题描述 投票:5回答:3

除了PyYAML,还有没有安全的Python数据序列化库可以正确处理 unicodestr?

例如:?

>>> json.loads(json.dumps([u"x", "x"]))
[u'x', u'x'] # Both unicode
>>> msgpack.loads(msgpack.dumps([u"x", "x"]))
['x', 'x'] # Neither are unicode
>>> bson.loads(bson.dumps({"x": [u"x", "x"]}))
{u'x': [u'x', 'x']} # Dict keys become unicode
>>> pyamf.decode(pyamf.encode([u"x", "x"])).next()
[u'x', u'x'] # Both are unicode

注意,我希望序列化器是 安全的 (所以 picklemarshel 都出来了),PyYAML是一个选项,但我不喜欢YAML的复杂性,所以我想知道是否还有其他选项。

编辑说明:似乎对我的数据的性质有一些混淆。有些数据是Unicode(如名称),有些是二进制(如图像)......因此,一个序列化库会让人感到困惑。unicodestr 对我来说,就像一个图书馆一样没有用处,因为它混淆了我的注意力。"42"42.

python serialization
3个回答
1
投票

你有没有试过 伯特?

>>> import bert
>>> bert.decode(bert.encode([u"x", "x"]))
[u'x', 'x']
>>> bert.decode(bert.encode({"x":[u"x", "x"]}))
{'x': [u'x', 'x']}

(要安装的话,你得先手动安装erlastic,因为有了 这个悬而未决的拉请求)


3
投票

也许就用Python的 repr 来存储该值,并使用 天文.literal_eval 方法的时候,我发现 msgpack-python 0.4 现在支持 strunicode 的 use_bin_typeencoding 参数。

In [7]: ast.literal_eval (repr({"d": ["x", u"x"]}))
Out[7]: {'d': ['x', u'x']}

2
投票

我也在寻找同样的东西,我发现msgpack-python 0.4现在支持strunicode的使用_bin_typeencoding参数。

>>> msgpack.unpackb(msgpack.packb(["uu\x00u", u"adsa\xe4"], use_bin_type=True, encoding="utf-8"), encoding="utf-8")
['uu\x00u', u'adsa\xe4']
© www.soinside.com 2019 - 2024. All rights reserved.