Модуль unidecode является более безопасной опцией (он будет обрабатывать другие специальные символы, такие как "степень"):
>>> from unidecode import unidecode
>>> s = u'This is sóme randóm "text" that í wánt to process'
>>> unidecode(s)
'This is some random "text" that i want to process'
>>> import urllib
>>> urllib.urlencode(dict(x=unidecode(s)))[2:]
'This+is+some+random+%22text%22+that+i+want+to+process'
[обновление]
я думаю, что уже делаю это -> ты "ааааааоооооеееецииииууууын" - Марко Бруггманн
Достаточно справедливо, если вы хотите отслеживать все символы Юникода для своей таблицы перевода (акцентированные символы - не единственные проблемы, на вашем параде очень много символов).
Хуже всего то, что многие символы Юникода могут быть визуально идентичны своим аналогам в ASCII, что приводит к трудностям в диагностике ошибок.
[обновление]
Как насчет чего-то вроде:
>>> safe_chars = 'abcdefghijklmnopqrstuvwxyz01234567890-_'
>>> filter(lambda x: x in safe_chars, "i think i'm already doing that")
'ithinkimalreadydoingthat'
[обновление]
@ Daenyth Я пробовал, но получаю только ошибки: из urllib import urlencode => urlencode ('google.com/';) => TypeError: недопустимая нестроковая последовательность или объект сопоставления - Marco Bruggmann
Функция urlencode предназначена для получения форматированного вывода QUERYSTRING (a = 1 & b = 2 & c = 3). Ожидаются пары ключ / значение:
>>> urllib.urlencode(dict(url='google.com/'))
'url=google.com%2F'
>>> help(urllib.urlencode)
Help on function urlencode in module urllib:
urlencode(query, doseq=0)
Encode a sequence of two-element tuples or dictionary into a URL query string.
If any values in the query arg are sequences and doseq is true, each
sequence element is converted to a separate parameter.
If the query arg is a sequence of two-element tuples, the order of the
parameters in the output will match the order of parameters in the
input.
(END)
[обновление]
Это будет работать без сомнения, но я хочу нормализовать текст, чтобы я мог сам поместить его в URL и использовать его как Id. Например, если я хочу показать продукты из категории, я бы предпочел поставить «ninos-y-bebes» вместо «niños-y-bebés» (испанский для детей и младенцев). Я действительно не хочу, чтобы все символы (которые являются специальными символами на испанском языке) в моем URL, но я также не хочу избавляться от них. Вот почему я хотел бы заменить все символы, которые выглядят одинаково (не на все 100%, мне все равно), а затем удалить все оставшиеся не буквенно-цифровые символы.
Хорошо, Марко, вам нужна процедура для создания так называемых слизней , не так ли?
Вы можете сделать это в одну строку:
>>> s = u'This is sóme randóm "text" that í wánt to process'
>>> allowed_chars = 'abcdefghijklmnopqrstuwvxyz01234567890'
>>> ''.join([ x if x in allowed_chars else '-' for x in unidecode(s.lower()) ])
u'this-is-some-random--text--that-i-want-to-process'
>>> s = u"Niños y Bebés"
>>> ''.join([ x if x in allowed_chars else '-' for x in unidecode(s.lower()) ])
u'ninos-y-bebes'
>>> s = u"1ª Categoria, ½ docena"
>>> ''.join([ x if x in allowed_chars else '-' for x in unidecode(s.lower()) ])
u'1a-categoria--1-2-docena'