我正在针对RESTful API(我正在使用python / urllib2 / pandas)发出3个单独的查询,每个查询包含以下字符串变体之一:
(1) 'Caveolin-1 suppresses Human Immunodeficiency Virus-1 replication by inhibiting acetylation of NF-\xce\xbaB'
(2) 'Caveolin-1 suppresses Human Immunodeficiency virus-1 replication by inhibiting acetylation of NF-κB'
(3) 'Caveolin-1 suppresses Human Immunodeficiency virus-1 replication by inhibiting acetylation of NF
结果是:
(1)不返回任何结果(以编程方式从python完成)
(2)工作并返回预期结果 - 匹配记录(使用Chrome插件手动触发查询以进行RESTful API调用,并将字符串原样粘贴到API调用的相应部分中)
(3)与(2)
的作用相同由于我有源数据并且通过从数据帧中读取字符串从python以编程方式执行(1),是否有任何方法使用源数据中的unicode字符做某事(不知道是什么)(我猜这是什么'\ xbaB'等)使它们可以通过API? '\ xce \ xbaB'似乎是基于上述的'κB'的编码。
或者这就是我要查看API文档的内容(对于这一点我不认为......)。
如果这很难/更容易 - 什么是在传递查询之前从字符串中删除任何unicode字符的最佳方法(即回退到(3))?
提前致谢!
REF:来自python我正在执行以下API API
api_call = 'http://some_api/index:ABCDE?query=title(' + str(title_string) + ')' headers = {'APIKey': API_key, 'accept':'text/xml, application/atom+xml'}
request = urllib2.Request(api_call, headers = headers, )
response = urllib2.urlopen(request,'' , 30)
return response.read()
答案 0 :(得分:2)
\ xce和\ xba分别是十六进制值ce和ba的字符。如果你不了解更多关于如何与API交谈或者期望什么,我会认为你可以做这样的事情来使字符串可以通过:
>>> urllib.quote('an Immunodeficiency Virus-1 replication by inhibiting acetylation of NF-\xce\xbaB')
'an%20Immunodeficiency%20Virus-1%20replication%20by%20inhibiting%20acetylation%20of%20NF-%CE%BAB'
编辑:
通常在python中,这是我如何向URL添加参数:
params = {'query' : 'title(' + title_string + ')'}
api_call = 'http://some_api/index:ABCDE?' + urllib.urlencode(params)
所以我倾向于那个而不是我之前的urllib.quote建议(如果title_string是路径的一部分,我认为这是适用的),但我不确定它是否足以使用title_string中的十六进制值。我认为这将取决于它在服务器端的处理方式。
答案 1 :(得分:0)
尝试将“\”转换为“\\”,因为'\ x'表示预定为十六进制数的十六进制字符代码