如何将 dict 转换为 unicode JSON 字符串?

2024-04-16

使用标准库对我来说似乎不可能json模块。使用时json.dumps它会自动转义所有非 ASCII 字符,然后将字符串编码为 ASCII。我可以指定它不转义非 ASCII 字符,但是当它尝试将输出转换为 ASCII 时它会崩溃。

问题是 -我不想要 ASCII!我只想将我的 JSON 字符串返回为unicode (or UTF-8) 细绳。有什么方便的方法可以做到这一点吗?

这是一个例子来演示我的内容want:

d = {'navn': 'Åge', 'stilling': 'Lærling'}
json.dumps(d, output_encoding='utf8')
# => '{"stilling": "Lærling", "navn": "Åge"}'

但当然,没有这样的选择输出编码,所以这是实际的输出:

d = {'navn': 'Åge', 'stilling': 'Lærling'}
json.dumps(d)
# => '{"stilling": "L\\u00e6rling", "navn": "\\u00c5ge"}'

总结一下 - 我想将 Python 字典转换为UTF-8 JSON 字符串没有任何逃脱。我怎样才能做到这一点?


我会接受以下解决方案:

  • 黑客(预处理和后处理输入dumps达到想要的效果)
  • 子类化JSON编码器 http://docs.python.org/library/json.html#json.JSONEncoder(我不知道它是如何工作的,文档也不是很有帮助)
  • PyPi 上可用的第三方库

要求

  • 确保您的 python 文件采用 UTF-8 编码。否则你的非ascii字符将变成问号,?。 Notepad++ 为此提供了出色的编码选项。

  • 确保包含适当的字体。如果你想显示日文字符,那么你需要安装日文字体。

  • 确保您的 IDE 支持显示 unicode 字符。 否则你可能会得到一个UnicodeEncodeError抛出错误。

Example:

UnicodeEncodeError: 'charmap' codec can't encode characters in position 22-23: character maps to <undefined>

PyScripter 对我有用。它包含在“Portable Python”中,位于http://portablepython.com/wiki/PortablePython3.2.1.1 http://portablepython.com/wiki/PortablePython3.2.1.1

  • 确保您使用的是 Python 3+,因为此版本提供更好的 unicode 支持。

Problem

json.dumps() 转义 unicode 字符。

Solution

阅读底部的更新。或者...

将每个转义字符替换为解析后的 unicode 字符。

我创建了一个简单的 lambda 函数,名为getStringWithDecodedUnicode就是这么做的。

import re   
getStringWithDecodedUnicode = lambda str : re.sub( '\\\\u([\da-f]{4})', (lambda x : chr( int( x.group(1), 16 ) )), str )

Here's getStringWithDecodedUnicode作为常规函数。

def getStringWithDecodedUnicode( value ):
    findUnicodeRE = re.compile( '\\\\u([\da-f]{4})' )
    def getParsedUnicode(x):
        return chr( int( x.group(1), 16 ) )

    return  findUnicodeRE.sub(getParsedUnicode, str( value ) )

Example

testJSONWithUnicode.py(使用 PyScripter 作为 IDE)

import re
import json
getStringWithDecodedUnicode = lambda str : re.sub( '\\\\u([\da-f]{4})', (lambda x : chr( int( x.group(1), 16 ) )), str )

data = {"Japan":"日本"}
jsonString = json.dumps( data )
print( "json.dumps({0}) = {1}".format( data, jsonString ) )
jsonString = getStringWithDecodedUnicode( jsonString )
print( "Decoded Unicode: %s" % jsonString )

Output

json.dumps({'Japan': '日本'}) = {"Japan": "\u65e5\u672c"}
Decoded Unicode: {"Japan": "日本"}

Update

或者……直接过去ensure_ascii=False作为 json.dumps 的选项。

注意:您需要满足我在开始时概述的要求,否则这是行不通的。

import json
data = {'navn': 'Åge', 'stilling': 'Lærling'}
result = json.dumps(d, ensure_ascii=False)
print( result ) # prints '{"stilling": "Lærling", "navn": "Åge"}'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 dict 转换为 unicode JSON 字符串? 的相关文章

  • 基于 Pandas 中的管道分隔列创建多个新列

    我有一个 pandas 数据框 其中有一个管道分隔的列 其中包含任意数量的元素 称为 零件 这些管道串中的元素数量从 0 到超过 10 个不等 所有管道串中包含的唯一元素的数量并不比行数小很多 这使得我无法在创建新列 对于每一行 我想创建一
  • 用顶点之间的渐变填充 matplotlib 多边形

    我正在使用 matplotlib 的 Poly3DCollection 绘制多边形 三角形 的集合 三角形位于具有与其关联的颜色的顶点之间 我目前正在用通过平均三个顶点的颜色确定的纯色填充每个三角形 绘制三角形以形成 3D 表面网格 I w
  • 如何从字符串读取 NumPy 二维数组?

    如何从字符串中读取 Numpy 数组 取一个像这样的字符串 0 5544 0 4456 0 8811 0 1189 并将其转换为数组 a from string 0 5544 0 4456 0 8811 0 1189 where a成为对象
  • 如何模拟嵌套函数?

    我想模拟特定函数中的一些嵌套函数 tools py def cpu count def get cpu quota return int load sys fs cgroup cpu cpu cfs quota us def get cpu
  • 使用 Pyodbc + UnixODBC + FreeTDS 设置连接设置

    我使用 Pyodbc UnixODBC 和 FreeTDS 进行了设置 但在其中的某个地方设置了一些选项 但我不知道在哪里 根据 SQL Server Management Studio 我的程序在打开连接时发送一些设置 set quote
  • Google CoLab 中的 Python 3 支持

    我一直在尝试使用 Jupyter 笔记本https colab research google com https colab research google com 并且默认情况下它们似乎运行 Python 2 7 有什么方法可以在 Co
  • 将字符串作为有序字典导入

    我有一个没有扩展名的文件 其中包含这样的行 忽略行之间的间距 但每一行都是单独的行 OrderedDict key1 u value1 key2 value2 OrderedDict key1 u value1 key2 value2 Or
  • 如何更新 certifi 的根证书?

    我正在使用 certifi python 模块来验证 ssl 连接 我查看了 certifi python2 7 site packages certifi cacert pem 中包含的根证书 其中一些证书已过期 我如何更新这些证书 我尝
  • 使用 JsonWriter 时,WriteStartConstructor 的用途是什么?

    标题说明了一切 我看到它 及其相应的结尾 吐出以下内容 new Foo 但我不明白什么new实际上是在反序列化时执行的 文档只是说它编写了一个 Json 构造函数 但没有说 Json 构造函数是什么is 此方法是作为增强功能的一部分引入的
  • 如何在关心 NaN 值的同时获取数据框中值的百分比变化?

    我有以下数据框 Date A 2015 01 01 10 2015 01 02 14 2015 01 05 NaN 2015 01 06 NaN 2015 01 07 5 2015 01 10 1 2015 01 11 NaN 2015 0
  • 如何从另一个 Python 文件将 Uvicorn FastAPI 服务器作为模块运行?

    我想使用 Uvicorn 从不同的 Python 文件运行 FastAPI 服务器 uvicorn模块 main py import uvicorn import webbrowser from fastapi import FastAPI
  • 如何在 Robot Framework 中将变量定义为具有列表值的字典

    在我的一个测试用例中 我需要定义一个字典 其中键是字符串 值是字符串数组 我怎样才能在机器人框架中做到这一点 我第一次尝试使用如下所示的构造 但行不通 Variables Dictionary A StringA1 StringA2 B S
  • 在 python matplotlib 中格式化损坏的 y 轴

    我正在 matplotlib 中处理一个 相当复杂的 条形图 它包含来自多个源的摘要数据 每个源都沿 x 轴标记 y 轴上有一系列结果 许多结果都是异常值 我尝试使用断开的 y 轴来显示这些结果 而不会使用以下组合来扭曲整个图表这个方法 h
  • pytube 在 Android 中传输视频所需的时间太长

    我在用pytube在 Android 中流式传输视频 借助chaquopy 视频文件 py from pytube import YouTube def video link yt YouTube f https www youtube c
  • 在matplotlib中绘制曲线连接点

    所以我试图绘制曲线来连接点 这是我正在使用的代码 def hanging line point1 point2 a point2 1 point1 1 np cosh point2 0 np cosh point1 0 b point1 1
  • Python:计算非整数的阶乘

    我想知道是否有一种快速的 Pythonic 的方法来计算非整数的阶乘 例如 3 4 当然 内置的factorial 函数在Math模块可用 但它仅适用于积分 我不关心这里的负数 你想用math gamma x http docs pytho
  • 如何将目录导入为 python 模块

    如果有目录 home project aaa 我知道它是一个Python包 那么 我如何通过知道它的路径来导入这个模块 这意味着 我希望代码能够正常工作 aaa load module home project aaa 我知道的唯一方法是
  • 如何在 nltk 中使用 hunpos 标记文本文件?

    有人可以帮我解决在 nltk 中标记语料库的 hunpos 语法吗 我要导入什么hunpos HunPosTagger module http nltk googlecode com svn trunk doc api nltk tag h
  • App Engine、PIL 和叠加文本

    我正在尝试在 GAE 上的图像上覆盖一些文本 现在他们公开了 PIL 库 这应该不是问题 这就是我所拥有的 它有效 但我不禁认为我应该直接写入背景图像 而不是创建单独的覆盖图像然后合并 我可以用吗Image frombuffer http
  • 优化Gson反序列化

    优化反序列化的最佳方法是什么 我目前正在使用标准 Gson toJson 和 Gson fromJson 方法来序列化和反序列化一些复杂对象 我希望尽可能减少反序列化时间 如果重要的话 我的最复杂的对象包含 43 个变量 如果你想使用 Gs

随机推荐

  • java 中 (--i + ++i) 中表达式的输出

    int i 9 System out println i i 执行输出 17i 的最终值为 9 但是根据java中的结合性和优先级规则 i应该首先执行 即从右到左 给出10 然后 i给出9 将两者相加 答案应该是19 至于我知道这样的代码在
  • 在 OpenGL 着色器中检测 NaN 的最佳方法

    今天早上我遇到了一个似乎神秘的错误 我很幸运能够很快找到解决方案 我除以计数器以生成片段着色器内部的平均值 当然 当计数器为零时 所得的颜色值变为 NaN 在混合过程中 NVidia 优雅地将 NaN 视为 0 值 但 Intel 没有这样
  • 调试断言失败 OpenCv is_block_type_valid(header->_block_use)

    我是使用 Visual Studio 和 openCv 编程的新手 我编写了一个简单的程序来显示图像的红色通道 但每次运行代码时都会抛出 DEBUG ASSERTION FAILED 错误 include
  • jqGrid 复选框列

    我有一个相当复杂的网格 有两列格式化为复选框 这些列定义如下 name Alert A index Alert A width 22 align center sortable false formatter CheckBoxFormatt
  • 无法将简单的无符号字节 RGB 纹理映射到四边形:

    我有一个非常简单的程序 将虚拟红色纹理映射到四边形 下面是 C 中的纹理定义 struct DummyRGB8Texture2d uint8 t data 3 4 int width int height DummyRGB8Texture2
  • Spring Boot - 处理 JSON 或 HTML 的错误控制器

    我有一个春季启动应用程序 我有一个自定义错误控制器 它映射到使用ErrorPage映射 这些映射主要基于 HTTP 状态代码 并且通常只是适当地呈现 HTML 视图 例如我的映射 Configuration class ErrorConfi
  • 保存从 MS Access 2007 到 MS SQL Server 的 ODBC 连接的密码

    我负责将旧的 Access 2007 项目迁移到 MS SQL Server 2008 Express 第一阶段是将所有数据从 MS Access 数据库移动到 SQL Server 同时将 Access 表单和报告保留在客户端 因此 现在
  • 从中心生长[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我一直在尝试让底部的圆圈在 Firefox 中增长 需要添加其他前缀 仍在开发中 他们表现得很好 但我的目标是让他们从中
  • Spring MVC形式:选择选定的值?

    有没有办法通过 Spring MVC 在下拉列表中选择当前值
  • Django 表单字段中的 JavaScript 函数调用

    我想创建一个带有复选框的表单 单击时 它们会打开单独的文本区域 供用户输入更多信息 如果我想使用 Django 动态创建的表单字段 有没有一种方法可以为每个复选框添加一个函数调用 您可以使用 JavaScript 动态添加事件处理程序 您可
  • C# - WPF - 不使用 System.Windows.Forms 获取文件夹浏览器对话框?

    我有这个WPFapp 我想有从用户那里获取目录路径的功能 我想使用一些文件夹浏览器对话框 但我don t想要实施它System Windows Forms或者在里面使用一些巨大的脚本 WPF 中是否有一些已经实现的获取对话框的路径 我在这里
  • 使用命令行工具构建时如何添加 .jar 文件依赖项?

    非常简单的问题 不使用Ants或Maven可以完成吗 我特指的是命令行工具 请注意 我不想创建 uberjar 我只是希望存档单元 知道 其外部依赖项在哪里 假设您正在谈论命令行调用javac 您所说的是 我可以提供库作为 javac 的参
  • Qt QFileDialog - 仅具有静态函数的本机对话框?

    我试图简单地保存一个文件 但是 我需要输入一个不带后缀的文件名来自动获取默认后缀 setDefaultSuffix 会这样做 我不想为此完全失去本机保存对话框 exec 没有从 QDialog 重载 因此它完全绕过本机钩子 忽略 DontU
  • 从 vueJS 方法调用 setTimeout() 不起作用

    我试图允许用户从应用程序重置或关闭给定服务器 我现在正在开发界面 并希望向用户提供有关正在发生的事情的消息 我显示数据对象中定义的消息来指示所采取的操作 我使用 setTimeout 来切换重置 消息和重置消息 请参阅以下方法 system
  • 命令键的 jQuery 键代码

    我读过了jQuery 事件按键 按下了哪个键 https stackoverflow com questions 302122 jquery event keypress which key was pressed and 如何使用 jqu
  • python3.8中的最终注释和装饰器

    由于 Python 3 8 即将发布 我只是想知道两者之间的区别最终装饰器和最终注释 在 Python 3 8 中 Python 类型提示功能 体现为typing module https docs python org 3 library
  • Vim:如何滚动绑定光标线?

    Vim 的分割窗口视图中的两个窗口可以相互绑定滚动通过设置 set scrollbind对于他们俩来说 完成此操作后 如果我在一个窗口中向下滚动光标 其他窗口也会随之向下滚动 但是 两个窗口中的光标并未相互绑定 我用过 set cursor
  • DdlGenerator 构造函数不需要参数?

    我想对我的数据库操作进行单元测试 我发现这段代码 https gist github com nboire 2819920 但是 我收到以下错误 CityGame test info Compiling 2 Java sources to
  • 当设备令牌过期时,是否会自动从 FCM 设备组中删除? [复制]

    这个问题在这里已经有答案了 我对 Firebase Cloud Messaging 还很陌生 而且我还没有能够得到这个问题的满意答案 另外 抱歉 所有的全部停止 不幸的是我在 2017 年买了一台 MacBook 苹果决定用它的键盘进行实验
  • 如何将 dict 转换为 unicode JSON 字符串?

    使用标准库对我来说似乎不可能json模块 使用时json dumps它会自动转义所有非 ASCII 字符 然后将字符串编码为 ASCII 我可以指定它不转义非 ASCII 字符 但是当它尝试将输出转换为 ASCII 时它会崩溃 问题是 我不