我正在使用Python-2.6 CGI个脚本,但在执行json.dumps()时在服务器日志(log)中发现了此错误,

Traceback (most recent call last):
  File "/etc/mongodb/server/cgi-bin/getstats.py", line 135, in <module>
    print json.dumps(​​__get​data())
  File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
    return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa5 in position 0: invalid start byte

​在这里

​__get​data()函数返回dictionary {}.

在发布这个问题之前,我已经提到了100个问题.


更新

下面这句话伤害了JSON编码器,

now = datetime.datetime.now()
now = datetime.datetime.strftime(now, '%Y-%m-%dT%H:%M:%S.%fZ')
print json.dumps({'current_time': now}) # this is the culprit

我为它找到了一个临时的解决办法

print json.dumps( {'old_time': now.encode('ISO-8859-1').strip() })

但我不确定这样做是否正确.

推荐答案

错误是因为字典中有一些非ascii字符,无法对其进行编码/解码.避免此错误的一种简单方法是使用encode()函数对此类字符串进行如下编码(如果a是非ascii字符的字符串):

a.encode('utf-8').strip()

Python相关问答推荐

如何从同一类的多个元素中抓取数据?

在for循环中保存和删除收件箱

CustomTKinter-向表单添加额外的输入字段

带有pandas的分区列上的过滤器的多个条件read_parquet

Pandas 群内滚动总和

将列表中的元素替换为收件箱中的元素

Tkinter滑动条标签.我不确定如何删除滑动块标签或更改其文本

具有症状的分段函数:如何仅针对某些输入值定义函数?

从webhook中的短代码(而不是电话号码)接收Twilio消息

Django管理面板显示字段最大长度而不是字段名称

使用新的类型语法正确注释ParamSecdecorator (3.12)

Pandas 都是(),但有一个门槛

从numpy数组和参数创建收件箱

如何在类和classy-fastapi -fastapi- followup中使用FastAPI创建路由

加速Python循环

如何从.cgi网站刮一张表到rame?

当独立的网络调用不应该互相阻塞时,'

无法使用DBFS File API路径附加到CSV In Datricks(OSError Errno 95操作不支持)

AES—256—CBC加密在Python和PHP中返回不同的结果,HELPPP

使用Python从rotowire中抓取MLB每日阵容