Замена специфических символов на обычную латиницу
Есть ссылки они открываются нормально в wikipedia. Но для работы мне нужно получить название, заменив специальные символы с символами соответствующими английскому языку
Bill_Skarsg%C3%A5rd
Ответы (2 шт):
Можете использовать эту программу. Для добавления спец. символов можно их скопировать из Microsoft Word в меню вставки символа.
special_chars = (
("à", "a"),
("á", "a"),
("â", "a"),
("ã", "a"),
("ä", "a"),
("å", "a"),
("ç", "c"),
("è", "e"),
("é", "e"),
("ê", "e"),
("ë", "e"),
("ì", "i"),
("í", "i"),
("î", "i"),
("ï", "i"),
("ñ", "n"),
("ò", "o"),
("ó", "o"),
("ô", "o"),
("õ", "o"),
("ö", "o"),
("ø", "o"),
("ù", "u"),
("ú", "u"),
("û", "u"),
("ü", "u"),
("ý", "y"),
("ÿ" "y")
)
def translate(s):
for special_char, char in special_chars :
s = s.replace(special_char, char).replace(special_char.upper(), char.upper())
return s
print(translate("Björk Ätêst"))
# Bjork Atest
Здесь не все спец. символы - только те, что имеют альтернативу в латинском алфавите.
%C3%A5 это символ å закодированный в процентную кодировку
для декодирования в пайтон есть функция unquote из модуля urllib.parse. Если кодировка UTF-8, то проблем в остальном не возникнет.
from urllib.parse import unquote
i = "Bill_Skarsg%C3%A5rd"
print(unquote(i))
# Bill_Skarsgård
А вот если вам нужна ASCII. Тогда можно произвести нормализацию и фильтрацию строки, чтобы избавиться от всех модификаторов.
import unicodedata
from urllib.parse import unquote
i = "Bill_Skarsg%C3%A5rd"
unquoted = unquote(i)
norm_text = unicodedata.normalize('NFD', unquoted)
shaved = ''.join(x for x in norm_text if not unicodedata.combining(x))
print(unicodedata.normalize('NFC', shaved))
# Bill_Skarsgard
Пример взят из книги "Python. К вершинам мастерства" автор Лучано Ромальо. Страницы 151-152.
Там есть важное дополнение, поэтому рекомендую ознакомиться.

