Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 存在特殊字符时curl post请求失败_Python_Json_Curl_Unicode_Special Characters - Fatal编程技术网

Python 存在特殊字符时curl post请求失败

Python 存在特殊字符时curl post请求失败,python,json,curl,unicode,special-characters,Python,Json,Curl,Unicode,Special Characters,好的,我知道关于这个话题的问题已经太多了;阅读其中的每一篇并没有帮我解决问题 我的网页上有“你好”。我的目标是将此内容作为json,去掉“hello”并写回其余内容,即,“?”返回页面 我正在使用curlpost请求回写网页。我获取json的代码如下所示: request = urllib2.Request("http://XXXXXXXX.json") user = 'xxx' base64string = base64.encodestring('%s:%s' % (xxx, xxx)) r

好的,我知道关于这个话题的问题已经太多了;阅读其中的每一篇并没有帮我解决问题

我的网页上有“你好”。我的目标是将此内容作为json,去掉“hello”并写回其余内容,即,“?”返回页面

我正在使用curlpost请求回写网页。我获取json的代码如下所示:

request = urllib2.Request("http://XXXXXXXX.json")
user = 'xxx'
base64string = base64.encodestring('%s:%s' % (xxx, xxx))
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib2.urlopen(request)   #send URL request
newjson = json.loads(result.read().decode('utf-8'))
encode_dict = {'!':'%21',
               '"':'%22',
               '#':'%24',
               '$':'%25',
               '&':'%26',
               '*':'%2A',
               '+':'%2B',
               '@':'%40',
               '^':'%5E',
               '`':'%60',
               '©':'\xa9',
               '®':'%AE',
               '™':'%99',
               '£':'%A3'
              }
for letter in text1:
            print (letter)
            for keyz, valz in encode_dict.iteritems():
                if letter == keyz:
                    print(text1.replace(letter, valz))
                    path = "xxxx"
                    subprocess.Popen(['curl','-u', 'xxx:xxx', 'Content-Type: text/html','-X','POST','--data',"text="+text1, ""+path])
此时,我的newres是unicode字符串。我发现我的curlpost请求只适用于百分比编码(例如,%的“%A3”)

最好的方法是什么?我写的代码如下:

request = urllib2.Request("http://XXXXXXXX.json")
user = 'xxx'
base64string = base64.encodestring('%s:%s' % (xxx, xxx))
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib2.urlopen(request)   #send URL request
newjson = json.loads(result.read().decode('utf-8'))
encode_dict = {'!':'%21',
               '"':'%22',
               '#':'%24',
               '$':'%25',
               '&':'%26',
               '*':'%2A',
               '+':'%2B',
               '@':'%40',
               '^':'%5E',
               '`':'%60',
               '©':'\xa9',
               '®':'%AE',
               '™':'%99',
               '£':'%A3'
              }
for letter in text1:
            print (letter)
            for keyz, valz in encode_dict.iteritems():
                if letter == keyz:
                    print(text1.replace(letter, valz))
                    path = "xxxx"
                    subprocess.Popen(['curl','-u', 'xxx:xxx', 'Content-Type: text/html','-X','POST','--data',"text="+text1, ""+path])
这段代码给了我一个错误:“UnicodeWarning:Unicode相等比较无法将两个参数转换为Unicode-将它们解释为不相等 如果字母==keyz:“


有更好的方法吗

问题在于编码。loads()返回字节流,需要使用decode()函数将其解码为unicode。然后,我使用encode('ascii','xmlcharrefreplace')用ascii编码替换了所有非ascii字符


而且,学习unicode基础知识对我帮助很大!是一个很好的教程。

是您在
if letter==keyz:
中的一个参数,它是一个普通(非unicode)的
字符串
?看,是的,“keyz”和“valz”只是字符串。我尝试将它们转换为unicode,方法是:keyz=unicode(key,'utf-8')和valz=unicode(valz,'utf-8')。它给了我这个错误:TypeError:不支持解码Unicode