iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >关于Python dict存中文字符dumps()的问题
  • 963
分享到

关于Python dict存中文字符dumps()的问题

2024-04-02 19:04:59 963人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

Background 之前数据库只区分了Android,iOS两个平台,游戏上线后现在PM想要区分国服,海外服,港台服。这几个字段从前端那里的接口获得,code过程中发现无论如何把中

Background

之前数据库只区分了AndroidiOS两个平台,游戏上线后现在PM想要区分国服,海外服,港台服。这几个字段从前端那里的接口获得,code过程中发现无论如何把中文的value丢到dict中存到数据库中就变成类似这样**"\u56fd\u670d"**

Solution

1.首先怀疑数据库编码问题,但看了一下数据库其他字段有中文格式的,所以要先check数据库(Mysql)的字符编码。

在这里插入图片描述

可以看到明明就TMD是utf-8啊,所以一定不是数据库层出现的问题,回到代码debug

2.Google一下
这个问题好多都是python2的解决方案,找到了一个感觉靠谱点的


dict1 = {'name':'张三'}
print(JSON.dumps(dict1,encoding='utf-8',ensure_ascii=False))

博客中的解法,但是我的Python版本是3.9,就会报Error如下


Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/local/python3/lib/python3.9/threading.py", line 950, in _bootstrap_inner
    self.run()
  File "/usr/local/python3/lib/python3.9/threading.py", line 888, in run
    self._target(*self._args, **self._kwargs)
  File "/home/dapan_ext/project_table.py", line 91, in Http_request
    self.get_data(project_response_data)
  File "/home/dapan_ext/project_table.py", line 115, in get_data
    json.dumps(dict_1, encoding='utf-8', ensure_ascii=False)
  File "/usr/local/python3/lib/python3.9/json/__init__.py", line 234, in dumps
    return cls(
TypeError: __init__() got an unexpected keyWord argument 'encoding'

意思就是:在__init__json这个东东的时候它不认识'encoding'这个argument。

那就翻阅源码康康->->:


def dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True,
        allow_nan=True, cls=None, indent=None, separators=None,
        default=None, sort_keys=False, **kw):
    """Serialize ``obj`` to a JSON fORMatted ``str``.

    If ``skipkeys`` is true then ``dict`` keys that are not basic types
    (``str``, ``int``, ``float``, ``bool``, ``None``) will be skipped
    instead of raising a ``TypeError``.

    If ``ensure_ascii`` is false, then the return value can contain non-ASCII
    characters if they appear in strings contained in ``obj``. Otherwise, all
    such characters are escaped in JSON strings.

    If ``check_circular`` is false, then the circular reference check
    for container types will be skipped and a circular reference will
    result in an ``OverflowError`` (or worse).

    If ``allow_nan`` is false, then it will be a ``ValueError`` to
    serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in
    strict compliance of the JSON specification, instead of using the
    javascript equivalents (``NaN``, ``Infinity``, ``-Infinity``).

    If ``indent`` is a non-negative integer, then JSON array elements and
    object members will be pretty-printed with that indent level. An indent
    level of 0 will only insert newlines. ``None`` is the most compact
    representation.

    If specified, ``separators`` should be an ``(item_separator, key_separator)``
    tuple.  The default is ``(', ', ': ')`` if *indent* is ``None`` and
    ``(',', ': ')`` otherwise.  To get the most compact JSON representation,
    you should specify ``(',', ':')`` to eliminate whitespace.

    ``default(obj)`` is a function that should return a serializable version
    of obj or raise TypeError. The default simply raises TypeError.

    If *sort_keys* is true (default: ``False``), then the output of
    dictionaries will be sorted by key.

    To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
    ``.default()`` method to serialize additional types), specify it with
    the ``cls`` kwarg; otherwise ``JSONEncoder`` is used.

    """
    # cached encoder
    if (not skipkeys and ensure_ascii and
        check_circular and allow_nan and
        cls is None and indent is None and separators is None and
        default is None and not sort_keys and not kw):
        return _default_encoder.encode(obj)
    if cls is None:
        cls = JSONEncoder
    return cls(
        skipkeys=skipkeys, ensure_ascii=ensure_ascii,
        check_circular=check_circular, allow_nan=allow_nan, indent=indent,
        separators=separators, default=default, sort_keys=sort_keys,
        **kw).encode(obj)

注意到这里:

If ``ensure_ascii`` is false, then the return value can contain non-ASCII
    characters if they appear in strings contained in ``obj``. Otherwise, all
    such characters are escaped in JSON strings.

意思就是:
ensure_ascii置为false时,返回值就可以返回非ASCII编码的字符,这岂不正是我们需要的,Got it!

回去改代码:


server_name = str(related['name'])
# print(server_name)
dict_1 = {'appKey': related['appKey'], 'client': related['client'], 'name': server_name}
crasheye.append(dict_1)
crasheyes = json.dumps(crasheye, ensure_ascii=False)

完美解决问题(●ˇ∀ˇ●)

在这里插入图片描述

到此这篇关于Python dict存中文字符dumps()的文章就介绍到这了,更多相关Python dict中文字符dumps()内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 关于Python dict存中文字符dumps()的问题

本文链接: https://www.lsjlt.com/news/155818.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 关于Python dict存中文字符dumps()的问题
    Background 之前数据库只区分了Android,IOS两个平台,游戏上线后现在PM想要区分国服,海外服,港台服。这几个字段从前端那里的接口获得,code过程中发现无论如何把中...
    99+
    2022-11-12
  • 怎么解决关于Python dict存中文字符dumps()的问题
    本篇内容主要讲解“怎么解决关于Python dict存中文字符dumps()的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决关于Python dict存中文字符dumps()的问题”...
    99+
    2023-06-25
  • 关于BufferedReader读取文件指定字符集问题
    目录BufferedReader读取文件指定字符集问题BufferedReader类读取中文乱码BufferedReader读取文件指定字符集问题 默认的读取方式 Buffere...
    99+
    2022-11-12
  • 关于c语言中输出字符指针的相关问题
    目录c语言输出字符指针问题例如定义一个 char * p = "hello";的字符指针c语言指针求字符串长度c语言输出字符指针问题 例如定义一个 char * ...
    99+
    2022-11-13
  • Java关于String字符串原理上的问题
    目录1、String 是最基本的数据类型吗?2、字符型常量和字符串常量的区别?3、什么是字符串常量池?4、String str=new String(“aaa”)创建了几个对...
    99+
    2022-11-13
  • 关于Java中String创建的字符串对象内存分配测试问题
    一、创建String对象的两种常用方法比较 举例说明 String str1 = "Java天下第一"; //方法1 String str2 = new String("Java...
    99+
    2022-11-12
  • python中isdigit()isalpha()用于判断字符串的类型问题
    目录isdigit() isalpha()用于判断字符串的类型要求1要求2isdigit()、isalpha()、isalnum() 三个函数的区别和注意点一、isdigit()二、...
    99+
    2022-11-11
  • 关于java数组与字符串相互转换的问题
    1.char数组(字符数组)->字符串 可以通过:使用String.copyValueOf(charArray)函数实现。   举例: char[] arr={'a','b...
    99+
    2022-11-12
  • 关于Python的文本文件转换编码问题
    目录前言 测试数据编码转换代码执行结果说明前言  因为编程的原因,经成会遇到字符编码的问题。如开发工具使用的是UTF-8编码(推荐使用),然后需要导入一个从其它地...
    99+
    2023-05-16
    Python文本文件 文件转换编码
  • 关于Python中字符串的各种操作
    目录1、字符串拼接2、字符串截取(字符串切片)3、分割字符串4、合并字符串5、统计字符串出现的次数6、检测字符串是否包含某子串7、字符串对齐方法8、检索字符串是否以指定字符串开头(s...
    99+
    2022-11-12
  • 关于python中.xpath的使用问题
    在python中使用xpath定位时,有时候会先用.xpath定位到一个地点,for循环后,继续使用.xpath,但是会出现问题,比如在下面这个例子中:    根...
    99+
    2022-11-12
  • 关于python中range()的参数问题
    目录range()的参数问题当参数只有一个时range(n)当参数有两个时range(x,y)当参数有三个时range(i,j,k)range(1,2)函数只有两个参数时语法rang...
    99+
    2022-11-11
  • 关于python中pika模块的问题
    工作中经常用到rabbitmq,而用的语言主要是python,所以也就经常会用到python中的pika模块,但是这个模块的使用,也给我带了很多问题,这里整理一下关于这个模块我在使用过程的改变历程已经中间碰到一些问题 的解决方法 刚开写代...
    99+
    2023-01-30
    模块 python pika
  • 关于Python读取文件的路径中斜杠问题
    最近用Python读取文件,发现有时候用 '\' 会报错,换成 '\\' 就不会报错。查了下资料发现,'\'是Python的转义字符,如果路径中存在'\t'或者'\r'这样的特殊字符,'\'就无法起到目录跳转的作用,因此报错。解决办法就是...
    99+
    2023-01-31
    斜杠 路径 文件
  • 关于C++中由于字节对齐引起内存问题定位分析
    最近遇到了一个奇怪的问题,在创建对象时程序异常退出,具体地,在构造函数中访问类中最后一个成员变量时,程序异常退出。 问题定位 查看代码,发现该类中有一个结构体数组,该结构体在类的外面...
    99+
    2022-11-12
  • 关于C# 调用Dll 传递字符串指针参数的问题
    最近用c#写一个小软件,要调用VC写的dll,传递参数给dll,由于是非托管代码,所以调用起来有点麻烦,要把参数转换成非托管代码的指针参数,然后再传递给dllview plainco...
    99+
    2022-11-12
  • 关于Python文本生成的Beam Search解码问题
    目录贪婪搜索是在每个时间步中选择概率最高的单词,也是我们最常用的一种方法,Beam Search不取每个标记本身的绝对概率,而是考虑每个标记的所有可能扩展。然后根据其对数概率选择最合...
    99+
    2022-11-11
  • mysql中文字符的问题怎么处理
    这篇文章主要介绍mysql中文字符的问题怎么处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql中文字符的问题mysql5.1上成功更改的例子:    &...
    99+
    2022-10-18
  • 3 python中关于字符串更多的一些注
    1 单引号和双引号都可以                             2 如果要打印let’s go!怎么办或者\是转义的意思3 字符串中包含一对单引号或双引号怎么办只能单引号套双引号但如果是字符串中包含一对单引号怎么打印呢只能...
    99+
    2023-01-31
    字符串 更多 python
  • 关于python中模块和重载的问题
    目录模块和重载模块与命名空间模块和重载 简单来讲,任意一个以.py结尾的python文件都是一个模块。例如有A.py和B.py两个文件。在A中可以通过导入B来读取B模块定义的内容,导...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作