Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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中推送到json时丢失字符串编码_Python_Linux_Utf 8 - Fatal编程技术网

在python中推送到json时丢失字符串编码

在python中推送到json时丢失字符串编码,python,linux,utf-8,Python,Linux,Utf 8,我正在尝试在Linux服务器上运行Python脚本,该服务器运行mysql查询,该查询会产生一些希伯来语字符串在此处将其制作为一个,以简化如下: #!/usr/bin/env python # -*- coding: utf-8 -*- import cgi import cgitb;cgitb.enable() import sys import urllib import base64 from MySQL import sql print """Content-Type: text/ht

我正在尝试在Linux服务器上运行Python脚本,该服务器运行mysql查询,该查询会产生一些希伯来语字符串在此处将其制作为一个,以简化如下:

#!/usr/bin/env  python
# -*- coding: utf-8 -*-
import cgi
import cgitb;cgitb.enable()
import sys
import urllib
import base64
from MySQL import sql
print """Content-Type: text/html\n"""
s = sql()
s.run("SET NAMES utf8;")
query = "SELECT page FROM pages"
results = s.run(query)
s.close()
ans = {}
ans['count'] = 0
ans['items'] = []    
for res in results:
    page = result[0].encode('utf-8')
    print "====="+page+"======"
    ans['items'].append({
           'td0':page
    })
print ans
s.close()
这张照片很难看

"Content-Type: text/html"

====/מפת-זרזיר/גריפאת/1/====
{'count': 0, 'items': [{ 'td0': '/\xd7\x9e\xd7\xa4\xd7\xaa-\xd7\x96\xd7\xa8\xd7\x96\xd7\x99\xd7\xa8/\xd7\x92\xd7\xa8\xd7\x99\xd7\xa4\xd7\x90\xd7\xaa/1/'}]}
为什么,为什么词典中的页面会丢失编码??? 我不知道为什么会这样。任何帮助都将不胜感激


谢谢

您不应该手工编码数据。改为使用json模块,并将数据保留为Unicode:

import json

for res in results:
    page = result[0]
    print "====={}======".format(page.encode('utf8')
    ans['items'].append({
        'td0':page
    })

print json.dumps(ans)
json模块将为您处理编码

您正在打印一个python字典,而不是JSON映射,python对字符串中的字节使用字符串文字表示。此表示使用\x。。转义以表示任何不可打印的字符。由于您直接打印UTF-8数据,因此数据包含许多无法打印的字节,但数据仍然存在:

>>> print '/\xd7\x9e\xd7\xa4\xd7\xaa-\xd7\x96\xd7\xa8\xd7\x96\xd7\x99\xd7\xa8/\xd7\x92\xd7\xa8\xd7\x99\xd7\xa4\xd7\x90\xd7\xaa/1/'.decode('utf8')
/מפת-זרזיר/גריפאת/1/
如果我以您的示例值为例,另一方面使用json模块生成有效的json输出:

>>> ans = {'count': 0, 'items': []}
>>> ans['items'].append('/\xd7\x9e\xd7\xa4\xd7\xaa-\xd7\x96\xd7\xa8\xd7\x96\xd7\x99\xd7\xa8/\xd7\x92\xd7\xa8\xd7\x99\xd7\xa4\xd7\x90\xd7\xaa/1/'.decode('utf8'))
>>> import json
>>> print json.dumps(ans)
{"count": 0, "items": ["/\u05de\u05e4\u05ea-\u05d6\u05e8\u05d6\u05d9\u05e8/\u05d2\u05e8\u05d9\u05e4\u05d0\u05ea/1/"]}

JSON允许\u。。。。转义码,模块使用这些转义码表示非ASCII和不可打印字符。这是正常的,兼容的JSON解码器可以很好地读取数据。

您不应该手工编码数据。改为使用json模块,并将数据保留为Unicode:

import json

for res in results:
    page = result[0]
    print "====={}======".format(page.encode('utf8')
    ans['items'].append({
        'td0':page
    })

print json.dumps(ans)
json模块将为您处理编码

您正在打印一个python字典,而不是JSON映射,python对字符串中的字节使用字符串文字表示。此表示使用\x。。转义以表示任何不可打印的字符。由于您直接打印UTF-8数据,因此数据包含许多无法打印的字节,但数据仍然存在:

>>> print '/\xd7\x9e\xd7\xa4\xd7\xaa-\xd7\x96\xd7\xa8\xd7\x96\xd7\x99\xd7\xa8/\xd7\x92\xd7\xa8\xd7\x99\xd7\xa4\xd7\x90\xd7\xaa/1/'.decode('utf8')
/מפת-זרזיר/גריפאת/1/
如果我以您的示例值为例,另一方面使用json模块生成有效的json输出:

>>> ans = {'count': 0, 'items': []}
>>> ans['items'].append('/\xd7\x9e\xd7\xa4\xd7\xaa-\xd7\x96\xd7\xa8\xd7\x96\xd7\x99\xd7\xa8/\xd7\x92\xd7\xa8\xd7\x99\xd7\xa4\xd7\x90\xd7\xaa/1/'.decode('utf8'))
>>> import json
>>> print json.dumps(ans)
{"count": 0, "items": ["/\u05de\u05e4\u05ea-\u05d6\u05e8\u05d6\u05d9\u05e8/\u05d2\u05e8\u05d9\u05e4\u05d0\u05ea/1/"]}

JSON允许\u。。。。转义码,模块使用这些转义码表示非ASCII和不可打印字符。这是正常的,兼容的JSON解码器可以很好地读取它。

这源于创建一个带有以下内容的字符串:====+page+====并将其打印出来,以及打印字典将使用reprans,并且表示形式可能不同。不过,您并没有丢失编码

编辑


正如Martijn所说,如果这是您的目的,您可以使用json模块创建一个新字符串。如果是这样的话,您不应该在打印前打印该行,否则,假设您正在制作API,一些客户端可能无法解析数据。

这是因为创建了一个字符串,其中包含:===+page+====并将其打印出来,而且打印字典将使用reprans,并且表示形式可能不同。不过,您并没有丢失编码

编辑


正如Martijn所说,如果这是您的目的,您可以使用json模块创建一个新字符串。如果是,,您不应在打印前打印该行,否则,假设您正在制作API,某些客户端可能无法解析数据。

Hi..我尝试了转储并删除了该页的.encode'utf-8'。仍按原样打印post@user1432779:如果您获得与原始帖子完全相同的输出,则不会重新加载代码正确。如果要为RESTful/HypermediaAPI返回JSON,那么首先应该返回utf-8编码的数据。json模块可以为您正确地执行此操作。当你将数据以字符串形式打印到屏幕上时,你不应该期望看到这些数据。太好了!!!!!工作得很好。你说得对。json解码器确实知道如何处理它:-嗨。我尝试了转储并删除了页面的。编码为“utf-8”。仍然按原样打印post@user1432779:如果您得到与原始帖子完全相同的输出,则无法正确重新加载代码。如果您返回的是RESTful/Hypermedia API的JSON,则首先应该返回utf-8编码的数据。json模块可以为您正确地执行此操作。当你将数据以字符串形式打印到屏幕上时,你不应该期望看到这些数据。太好了!!!!!工作得很好。你说得对。json解码器确实知道如何处理它:-嗨。打印是为了调试目的。打印是为了调试目的