当前位置: 首页 > 知识库问答 >
问题:

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

谭山
2023-03-14

编写了以下两个函数,用于存储和检索任何Python(内置或用户定义)对象,并结合使用json和jsonickle(在2.7中)

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

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

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

共有3个答案

乔宏峻
2023-03-14

我以为json…默认编码为utf-8,这是怎么回事?

不,它编码成ASCII码。它解码成< code>unicode。

>>> json.dumps(u'私')
'"\\u79c1"'
>>> json.loads('"\\u79c1"')
u'\u79c1'
汪晨
2023-03-14

您可以在调用加载()后对 unicode 刺痛进行编码。

json.loads('"\\u79c1"').encode('utf-8')

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

长孙谦
2023-03-14
import jsonpickle
import json

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

{“值”:“

 类似资料:
  • 有一个有趣的问题。。我们的防火墙后面有一个wordpress XML/RSS服务,该服务本地化到多个国家,可以与中文、俄文等完美结合。 为了公开这个服务,我们创建了一个简单的JSP服务,由于某些原因,它不会呈现外来字符。 任何想法都将不胜感激。

  • 第8章 输入输出和中断 输入输出功能是计算机的重要组成部分,是人—机交互功能的主要承担者。在早期的计算机系统中,通常把输入输出设备或功能作为次要的部分,而把CPU作为主要研究对象。但现在随着输入输出设备的日益丰富、功能要求越来越复杂,输入输出部分在整个计算机系统中的地位也得到了进一步提高。 本章先介绍了I/O的基本概念和I/O指令,再叙述了中断的概念及其工作过程,并列举出计算机系统中若干个常用的中

  • 文件 std::fs::File 本身实现了 Read 和 Write trait,所以文件的输入输出非常简单,只要得到一个 File 类型实例就可以调用读写接口进行文件输入与输出操作了。而要得到 File 就得让操作系统打开(open)或新建(create)一个文件。还是拿例子来说明 use std::io; use std::io::prelude::*; use std::fs::File;

  • 回顾一下我们写的第一个 Rust 程序就是带副作用的,其副作用就是向标准输出(stdout),通常是终端或屏幕,输出了 Hello, World! 让屏幕上这几个字符的地方点亮起来。println! 宏是最常见的输出,用宏来做输出的还有 print!,两者都是向标准输出(stdout)输出,两者的区别也一眼就能看出。至于格式化输出,基础运算符和字符串格式化小节有详细说明,这里就不再啰嗦了。 更通用

  • Boost.Assign Assign帮助你把一系列的值赋给容器。它通过对operator, (逗号操作符) and operator()() (函数调用操作符)的重载,带给用户一种数据赋值的很容易的方法。除了对原型风格的代码特别有用,这个库的功能在其它时候也很有用,使用这个库有助于提高代码的可读性。使用本库中的list_of还可以就地生成无名数组。 Assign 的作者是 Thorsten Ot

  • 简介 通过前面章节的学习,你已经可以在Scheme的交互式前端中编写并执行程序了。在本章中,我讲介绍如何输入和输出。使用这个特性,你可以从文件中读取数据或向文件中写入数据。 从文件输入 open-input-file,read-char和eof-object? 函数(open-input-file filename)可以用于打开一个文件。此函数返回一个用于输入的端口。函数(read-char po