django:将URL编码的Unicode字符串传递给QueryDict导致结果不正确

1 投票
1 回答
1097 浏览
提问于 2025-04-18 04:37
>>> 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'))

撰写回答