django:将URL编码的Unicode字符串传递给QueryDict导致结果不正确
>>> from django.http import QueryDict
下面的代码输出了 u'Adam\xc3\xb3w'
,这是我没想到的结果:
>>> QueryDict(u'search-search_term=Adam%C3%B3w')
<QueryDict: {u'search-search_term': [u'Adam\xc3\xb3w']}>
而这段代码输出了我预期的结果: u'Adam\xf3w'
:
>>> QueryDict('search-search_term=Adam%C3%B3w')
<QueryDict: {u'search-search_term': [u'Adam\xf3w']}>
在第一个例子中,我传递了一个Unicode字符串给QueryDict,而在第二个例子中,我传递的是字节字符串。不过,我对这种行为的细节还是不太确定。如果有人能解释一下为什么这两种情况会产生不同的结果,我会很感激。
1 个回答
0
我觉得 QueryDict
是需要一个字符串作为参数的。所以当你传入一个unicode字符串时,Python会尝试用默认的转换方式来转换它,而这个默认方式是ascii。如果你有一个unicode字符串,传递它作为参数时,应该明确地进行转换。
QueryDict((u'search-search_term=Adam%C3%B3w').encode('utf-8'))