好的,我知道这个话题已经有太多问题了;阅读每一篇都没有帮助我解决我的问题。
我的网页上有“你好'©”。我的目标是将这个内容作为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:“
有更好的方法吗?
答案 0 :(得分:0)
问题在于编码。 json.loads()返回一个字节流,需要使用decode()函数解码为unicode。然后,我通过使用编码(' ascii'' xmlcharrefreplace')使用ascii编码对unicode进行编码来替换所有非ascii字符。
newjson = json.loads(result.read().decode('utf-8').encode("ascii","xmlcharrefreplace"))
另外,学习unicode基础知识对我帮助很大! This是一个很好的教程。