当unicode数据出现时,Json解码器不一致

时间:2013-10-31 08:42:39

标签: python unicode

(此问题与this one

有关

看看下面的会话:

Python 2.7.3 (default, Jan  2 2013, 16:53:07) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> import simplejson as json
>>> 
>>> my_json = '''[
...   {
...     "id" : "normal",
...     "txt" : "This is a normal entry"
...   },
...   {
...     "id" : "αβγδ",
...     "txt" : "This is a unicode entry"
...   }
... ]'''
>>> 
>>> cache = json.loads(my_json, encoding='utf-8')
>>> 
>>> cache
[{'txt': 'This is a normal entry', 'id': 'normal'}, {'txt': 'This is a unicode entry', 'id': u'\u03b1\u03b2\u03b3\u03b4'}]

为什么json解码器有时会生成unicode,有时会生成简单的字符串?是不是应该生成总是 unicode?

1 个答案:

答案 0 :(得分:4)

似乎是simplejson中的优化,来自simplejson docs

  

如果s是str,那么解码的仅包含ASCII字符的JSON字符串可能因性能和内存原因而被解析为str。如果您的代码只需要unicode,则在调用decode之前将相应的解码解码为unicode。

注意: ASCII中包含的任何字符都以UTF-8和ASCII编码相同。所以ASCII是UTF-8的子集。