擅长:python、mysql、java
<p>我刚刚在网上找到了这个答案:</p>
<pre><code>import unicodedata
def remove_accents(input_str):
nfkd_form = unicodedata.normalize('NFKD', input_str)
only_ascii = nfkd_form.encode('ASCII', 'ignore')
return only_ascii
</code></pre>
<p>它可以很好地工作(例如法语),但我认为第二步(删除重音)可能比删除非ASCII字符处理得更好,因为对于某些语言(例如希腊语),这将失败。最好的解决方案可能是显式删除标记为变音符号的unicode字符</p>
<p><strong>编辑</strong>:这样做可以:</p>
<pre><code>import unicodedata
def remove_accents(input_str):
nfkd_form = unicodedata.normalize('NFKD', input_str)
return u"".join([c for c in nfkd_form if not unicodedata.combining(c)])
</code></pre>
<p>如果字符<code>unicodedata.combining(c)</code>可以与前面的字符组合,则<code>c</code>将返回true,这主要是在它是变音符号的情况下</p>
<p><strong>编辑2</strong>:<code>remove_accents</code>需要的是<em>unicode</em>字符串,而不是字节字符串。如果有字节字符串,则必须将其解码为unicode字符串,如下所示:</p>
<pre><code>encoding = "utf-8" # or iso-8859-15, or cp1252, or whatever encoding you use
byte_string = b"café" # or simply "café" before python 3.
unicode_string = byte_string.decode(encoding)
</code></pre>