curl post请求在特殊字符存在的情况下失败

时间:2015-02-25 01:21:56

标签: python json curl unicode special-characters

好的,我知道这个话题已经有太多问题了;阅读每一篇都没有帮助我解决我的问题。

我的网页上有“你好'©”。我的目标是将这个内容作为json,删除“hello”并将剩余的内容写回,即“'©”返回页面。

我正在使用CURL POST请求写回网页。获取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'))

此时,我的新手是unicode字符串。我发现我的curl post请求只适用于百分比编码(如£的“%A3”)。

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

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 - 将它们解释为不相等  if letter == keyz:“

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

问题在于编码。 json.loads()返回一个字节流,需要使用decode()函数解码为unicode。然后,我通过使用编码(' ascii'' xmlcharrefreplace')使用ascii编码对unicode进行编码来替换所有非ascii字符。

newjson = json.loads(result.read().decode('utf-8').encode("ascii","xmlcharrefreplace"))

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