python - 处理django查询中的外来字符

标签 python django internationalization

我正在搜索从 GeoNames.com 导入的城市名称。一些城市的名称中带有国际字符。例如,“Istanbul”在数据库中实际上是“İstanbul”。

当人们搜索“ Istanbul 尔”时, Istanbul 尔不会出现。

有没有一种方法可以将过滤器或解码器添加到知道 İstanbul = Istanbul 的搜索中

目前,它是:

cities = City.objects.filter(name__icontains=query)

最佳答案

Unidecode将帮助您解决此问题的某种形式。 Unidecode 会将非 ascii 字符转换为 ascii,例如:

>>> from unidecode import unidecode
>>> unidecode(u"İstanbul")
'Istanbul'

您可以通过分解 unicode 字符并删除组合变音符号来实现类似的效果。这种技术的问题是某些字符不可分解。因此,虽然“ö”将分解为“o”和变音符号,但“Ł”(左笔画)将保持不变。 Unidecode 成功地将“Ł”翻译成“L”。

但 Undeicode 并不能解决您所有的问题;城市可以有不同的名字,或者这些名字可以有不同的写法。比如在美国我们称中国的首都为“Beijing”,但我们习惯称它为“Peking”(瑞典语仍然叫“Peking”),将它的名字翻译成unidecode给了我们别的东西:

>>> unidecode(u"\u5317\u4EB0")
'Bei Jing '

最好的解决方案是使用特定语言的名称列表,而不是使用城市的实际名称。

关于python - 处理django查询中的外来字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8967789/

相关文章:

python - 需要requests.get一个cookie(ASP.NET_SessionID)然后requests.post,将cookie作为参数

python - 嵌套迭代器从嵌套的方法访问变量

python - 如何在 Windows 上的 docker 中的 django 中运行测试期间修复 'TypeError: isinstance() arg 2 must be a type or tuple of types'

python - 表单- Action 属性

ruby-on-rails - 如何在 Rails、表单构建器和错误消息中本地化日期格式?

python - Google App Engine Search API 执行基于位置的搜索

python - 如何让 PIL 在创建缩略图时考虑最短边?

django - 如何从 Django 的所有 View 中传递标准的静态变量?

angular - 如何使用 Angular i18n 自定义 ID

java - 用户数据国际化