Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 存在unicode数据时Json解码器不一致_Python_Unicode - Fatal编程技术网

Python 存在unicode数据时Json解码器不一致

Python 存在unicode数据时Json解码器不一致,python,unicode,Python,Unicode,这个问题与 请看以下课程: 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 = '''[ .

这个问题与

请看以下课程:

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吗?

它似乎是simplejson中的一个优化,来自:

如果s是str,则出于性能和内存原因,仅包含ASCII字符的解码JSON字符串可能会被解析为str。如果您的代码只需要unicode,则适当的解决方案是在调用decode之前将其解码为unicode

注:
ASCII中包含的任何字符在UTF-8和ASCII中编码相同。因此ASCII是UTF-8的一个子集。

它似乎是simplejson中的一个优化,来自:

如果s是str,则出于性能和内存原因,仅包含ASCII字符的解码JSON字符串可能会被解析为str。如果您的代码只需要unicode,则适当的解决方案是在调用decode之前将其解码为unicode

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

这是我在Python 2中期望的行为。为什么这是个问题?嗯,我想这可能会导致一打数亿的问题。我的具体问题是UnicodeWarning:Unicode相等比较无法将这两个参数转换为Unicode-将它们解释为不相等,因为到目前为止,我一直假设json加载生成字符串。现在我看到它应该生成unicode。在看到这一点之后,我意识到simplejson并不遵循规范,有时生成unicode,有时生成字符串。这意味着我必须撤销simplejson正在实现的优化,因为我要么需要所有unicode字符串,要么需要所有字符串,但决不能混合使用。这是我在Python 2中所期望的行为。为什么这是个问题?嗯,我想这可能会导致一打数亿的问题。我的具体问题是UnicodeWarning:Unicode相等比较无法将这两个参数转换为Unicode-将它们解释为不相等,因为到目前为止,我一直假设json加载生成字符串。现在我看到它应该生成unicode。在看到这一点之后,我意识到simplejson并不遵循规范,有时生成unicode,有时生成字符串。这意味着我必须撤销simplejson正在实现的优化,因为我要么需要所有字符串unicode,要么需要所有字符串,但决不能混合使用!所以我只需要将输入的json解码为unicode,然后将其传递给load?这看起来是可行的@gonvaled注意,要将JSON字符串类型转换为Python unicode,我假设库不是simplejson?有没有理由从这一个转到股票库?我从很久以前就开始依赖simplejson了。是的,但dict中的对象类型是str,而不是unicodehh!所以我只需要将输入的json解码为unicode,然后将其传递给load?这看起来是可行的@gonvaled注意,要将JSON字符串类型转换为Python unicode,我假设库不是simplejson?有没有理由从这一个转到股票库?我从很久以前就依赖simplejson了。