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

curl post request failing in the presence of special characters

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

我的网页上有“hello'©”。我的 objective 是将此内容获取为 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'))

此时我的newres是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 - 将它们解释为不相等 如果字母 == keyz:"

有更好的方法吗?

问题出在编码上。 json.loads() returns 字节流,需要使用 decode() 函数解码为 un​​icode。然后,我通过使用 encode('ascii','xmlcharrefreplace') 将 unicode 编码为 ascii 编码来替换所有非 ascii 字符。

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

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