首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jsonpickle/json函数输入utf-8,输出unicode?

jsonpickle/json函数输入utf-8,输出unicode?
EN

Stack Overflow用户
提问于 2012-08-13 05:11:26
回答 4查看 3.9K关注 0票数 2

编写了以下两个函数,用于存储和检索任何具有json和jsonpickle组合的Python (内置或用户定义的)对象(在2.7中)

代码语言:javascript
复制
def save(kind, obj):
    pickled = jsonpickle.encode(obj)
    filename = DATA_DESTINATION[kind] \\returns file destination to store json
    if os.path.isfile(filename):
        open(filename, 'w').close()
    with open(filename, 'w') as f:
        json.dump(pickled, f)

def retrieve(kind):
    filename = DATA_DESTINATION[kind] \\returns file destination to store json
    if os.path.isfile(filename):
        with open(filename, 'r') as f:
            pickled = json.load(f)
            unpickled = jsonpickle.decode(pickled)
            print unpickled

我还没有用用户定义的对象测试这两个函数,但是当我尝试save()一个内置的字符串字典时,(即.{'Adam':'Age 19','Bill','Age 32'}),当我检索相同的文件时,我得到了同样的unicode字典,{u'Adam':u'Age 19',u'Bill',u'Age 32'}。我认为json/jsonpickle默认编码为utf-8,这是怎么回事?

更新:删除所有jsonpickle编码/解码不会影响输出,仍然是unicode,这似乎是json的问题?也许我做错了什么。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-13 06:01:32

您可以在调用loads()之后对unicode字符串进行编码。

代码语言:javascript
复制
json.loads('"\\u79c1"').encode('utf-8')

现在你又有了一个普通的字符串。

票数 1
EN

Stack Overflow用户

发布于 2017-07-21 18:41:42

代码语言:javascript
复制
import jsonpickle
import json

jsonpickle.set_preferred_backend('json')
jsonpickle.set_encoder_options('json', ensure_ascii=False)
print( jsonpickle.encode( { "value" : "значение"}) )

{"value":"значение"}

票数 9
EN

Stack Overflow用户

发布于 2012-08-13 05:18:43

我还以为

..。默认编码为utf-8,这是怎么回事?

不,它会编码成ASCII码。然后解码成unicode

代码语言:javascript
复制
>>> json.dumps(u'私')
'"\\u79c1"'
>>> json.loads('"\\u79c1"')
u'\u79c1'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11925919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档