<p>我使用了<a href="https://stackoverflow.com/questions/956867/how-to-get-string-objects-instead-of-unicode-ones-from-json-in-python">How to get string objects instead of Unicode ones from JSON in Python?</a>和上面的答案的组合来完成这段日志记录。在</p>
<p>如上所述,<code>some_data_from_system{1|2}</code>不是字符串。问题是关于一个通用的错误日志系统。当出现问题时,您希望从多个子系统中转储尽可能多的信息,以供人员检查。当这些子系统之间不知道什么是编码错误的时候。为此,我从另一个线程中窃取了以下方法,但其本质基本上是带有“ignore”的<code>decode</code>方法</p>
<p><strong><em>请注意</em></strong>:这不是一种性能很好的方法(大多数盲递归通常不是这样)。因此,这不适合典型的生产应用程序;根据数据,它可能会运行到一个无限循环中。但是,假设您理解免责声明,对于错误日志系统来说,这是<em>好的</em>。在</p>
<pre><code>def convert_encoding(data, encoding = 'ascii'):
if isinstance(data, dict):
return dict((convert_encoding(key), convert_encoding(value)) \
for key, value in data.iteritems())
elif isinstance(data, list):
return [convert_encoding(element) for element in data]
elif isinstance(data, unicode):
return data.encode(encoding, 'ignore')
else:
return data
map = {"system1": some_data_from_system1, "system2", some_data_from_system2}
json.dumps(convert_encoding(map), ensure_ascii = False)
</code></pre>
<p>一旦完成,这个通用方法就可以用来转储数据。在</p>