我有一个处理GET请求的应用。我读取了一个变量,该变量包含使用%
作为通配符进行查询的模式。因此,如果网址包含patt=M%
,我将获取以M
开头的所有名称。一切正常,直到我尝试使用%D0
作为搜索模式。我收到以下错误:
The given query string could not be processed. Query strings for this resource must be encoded with 'utf8'.
正如我发现使用https://www.w3schools.com/tags/ref_urlencode.asp一样,%D0
字符串被视为非unicode字符的代码。
现在的问题是:如何处理%D0
这样的模式?换句话说:如何在没有编码的情况下将其视为三个字符?
到目前为止,我发现的一种解决方法是使用%25
代替%
,例如使用patt=%25D
- 但我需要实际处理请求。
编辑:
这是一个例子。让我们从tutorial获取基本的cherrpy示例。我刚修改它以处理params
并返回myvar
的值:
import cherrypy
class HelloWorld(object):
@cherrypy.expose
def index(self, **params):
#return "Hello world!"
return cherrypy.request.params['myVar']
if __name__ == '__main__':
cherrypy.quickstart(HelloWorld())
一旦它正在运行,你可以打开网址 - 默认情况下它应该从http://localhost:8080/?myVar=blahblahblah开始
它打开一个页面并返回myVar值:blahblahblah
现在,试试http://localhost:8080/?myVar=%D0
这会导致我想要阻止的错误。
当然http://localhost:8080/?myVar=%25D0工作正常并显示%D0
。
答案 0 :(得分:1)
您可以使用引用方法在网址中处理这些字符,如下所示:
import urllib
print urllib.quote("patt=M%")