【问题标题】:django: passing urlencoded unicode strings to QueryDict produces incorrect resultsdjango:将 urlencoded unicode 字符串传递给 QueryDict 会产生不正确的结果
【发布时间】:2014-06-14 10:09:19
【问题描述】:
>>> 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,而在第二种情况下,我将 bytestring 传递给它。但是,我仍然不确定这种行为的细节。如果有人能解释为什么这两件事会产生不同的结果,我会很高兴。

【问题讨论】:

    标签: python django unicode urlencode


    【解决方案1】:

    我认为QueryDict 需要一个字符串作为参数。因此,当您传递一个 unicode 字符串时,python 会尝试使用默认转换器(即 ascii)对其进行转换。如果你有一个 unicode 字符串,你应该在将它作为参数传递时显式地转换它。

    QueryDict((u'search-search_term=Adam%C3%B3w').encode('utf-8'))
    

    【讨论】:

    • encode('utf8') 确实解决了这个问题,但我还是不太明白为什么。
    猜你喜欢
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多