Python 从搜索函数的字符串中删除变音符号

Python 从搜索函数的字符串中删除变音符号,python,django,python-3.x,Python,Django,Python 3.x,我正在用Django开发一个简单的网页,我需要实现搜索功能。我目前正在使用类似以下内容: search_box = request.GET['search_box'] X = Foo.objects.filter(Q(title__contains=search_box) | Q(info__contains=search_box)).values() 如果指定的列包含搜索的字符串,它会检查我的数据库,但如果我搜索“kočík”,但我的数据库包含“kocik”,该怎么办。如何在Python3中

我正在用Django开发一个简单的网页,我需要实现搜索功能。我目前正在使用类似以下内容:

search_box = request.GET['search_box']
X = Foo.objects.filter(Q(title__contains=search_box) | Q(info__contains=search_box)).values()

如果指定的列包含搜索的字符串,它会检查我的数据库,但如果我搜索“kočík”,但我的数据库包含“kocik”,该怎么办。如何在Python3中从字符串中删除变音符号,或者最好的实现方法是什么?谢谢

您可以使用
unicodedata
软件包

import unicodedata
def shave_marks(txt):
    """This method removes all diacritic marks from the given string"""
    norm_txt = unicodedata.normalize('NFD', txt)
    shaved = ''.join(c for c in norm_txt if not unicodedata.combining(c))
    return unicodedata.normalize('NFC', shaved)
有关此算法的一些详细信息:

变音符号的主要问题是,在UTF-8中,有些组合字符修改了前面的字符,还有一些包含在字符中。例如,
'café'
'cafe/u0301'
看起来是一样的

发件人:

即使两个unicode字符串被规范化,并且在人类读者看来是相同的,但是如果一个具有组合字符,而另一个没有,那么它们之间的比较可能不相等


该算法首先分解一个字符串(使用“NFD”方法),使所有的变音符号成为组合字符,然后过滤掉所有组合字符,最后合成字符串(使用“NFC”方法)。

您可以使用
unicodedata
包来实现这一点

import unicodedata
def shave_marks(txt):
    """This method removes all diacritic marks from the given string"""
    norm_txt = unicodedata.normalize('NFD', txt)
    shaved = ''.join(c for c in norm_txt if not unicodedata.combining(c))
    return unicodedata.normalize('NFC', shaved)
有关此算法的一些详细信息:

变音符号的主要问题是,在UTF-8中,有些组合字符修改了前面的字符,还有一些包含在字符中。例如,
'café'
'cafe/u0301'
看起来是一样的

发件人:

即使两个unicode字符串被规范化,并且在人类读者看来是相同的,但是如果一个具有组合字符,而另一个没有,那么它们之间的比较可能不相等


该算法首先分解一个字符串(使用“NFD”方法),使所有的变音符号成为组合字符,然后过滤掉所有组合字符,最后合成字符串(使用“NFC”方法)。

只是简单而已。谢谢只是轻快而已。谢谢可能的重复可能的重复