【问题标题】:Django Request.GET and UnicodeDjango Request.GET 和 Unicode
【发布时间】:2019-10-31 03:06:48
【问题描述】:

如果是 unicode,我如何从 request.GET 中解码值?

def find_streets(request, qs=None):
    city_name = request.GET.get('city_name')
    print(request.GET.get('city_name'))
    # %u041C%u043E%u0441%u043A%u0432%u0430
    # (Москва)
    qs = models.Streets.objects.values_list('street_name', flat=True).filter(city__city_name=city_name)

如果我过滤英文单词 - 我成功获得结果,但如果我过滤俄语单词 - 结果为空。 例如,俄语单词Москва 从 unicode 中的 request.GET 返回:

%u041C%u043E%u0441%u043A%u0432%u0430

将此编码为 utf-8 会返回相同的值。

如何将%u041C%u043E%u0441%u043A%u0432%u0430 转换为Москва 或如何使用此unicode 值过滤DB 数据?

【问题讨论】:

  • 这个值最初是从哪里来的?
  • @DanielRoseman 我找到了解决方案,问题出在 JS 代码中。您的问题帮助我找到了错误!

标签: python django python-3.x unicode


【解决方案1】:

正如这篇文章所建议的:here

你可以像这个例子一样使用 urllib:

a = b'restaurant_type=caf\xc3\xa9'
urllib.parse.parse_qs(a.decode())
# > {'restaurant_type': ['café']}

在你的情况下,它可能是:

def find_streets(request, qs=None):
    city_name_tmp = request.GET.get('city_name')
    city_name = urllib.parse.parse_qs(city_name.decode())
    qs = models.Streets.objects.values_list('street_name', flat=True).filter(city__city_name=city_name)

你能试着给我结果吗?

【讨论】:

  • 嗨。我在我的 JS 代码中发现错误 - 请参阅下面的答案。但是为了教育,我尝试在我的案例中使用您的代码并得到错误:AttributeError: 'str' object has no attribute 'decode'。 city_name 具有字符串类型。我试过 city_name_tmp.encode().decode() 并得到空结果
【解决方案2】:

对不起。问题不在 Python 中,而是在我的 JS 代码(escape() 函数)中。我用 encodeURI() 替换了它。

例如。 var url = "find_streets?city_name=" + encodeURI(cityName);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2015-09-02
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多