Python取代了许多不同语言的特殊字符



我正在从一个网站上阅读表格,其中一列是大学名称,其中一些名称具有以下特殊字符(但名称的写法就像我把它们放在这里一样,所以这不是我可以通过以不同的方式阅读网络来解决的任务):

['Koç University', 'Technische Universität Dresden', 'Universität für Musik und darstellende Kunst Wien', 'Technische Universität Wien', 'Ãx89cole Nationale Supérieure des Beaux-Arts, Paris', 'Universidad Simón BolÃxadvar (USB)', 'PontifÃxadcia Universidade Católica do Rio Grande do Sul (PUCRS)', 'Bogaziçi Ãx9cniversitesi', 'UniversitÃxa0 degli Studi di Udine', 'Universitat Autònoma de Barcelona', 'Université de Rennes 1', 'Ãx89cole Normale Supérieure de Lyon', 'Ãx89cole Nationale Supérieure de Création Industrielle, ENSCI Les Ateliers', 'Universität Bremen', 'Institut National des Sciences Appliquées de Lyon (INSA)', 'Université Laval', 'Universität des Saarlandes', 'Universität Konstanz', 'Philipps-Universität Marburg ', 'El Colegio de México, A.C.', 'Humboldt-Universität zu Berlin', 'PontifÃxadcia Universidade Católica do Rio de Janeiro', 'Universidade Federal do Paraná - UFPR', 'Universität Potsdam', 'USI - Università  della Svizzera italiana', 'Palacký University Olomouc', 'CentraleSupélec', 'Arts et Métiers, ParisTech', 'Université de Sherbrooke', 'UniversitÃxa0 degli studi Roma Tre', 'Westfälische Wilhelms-Universität Münster ', 'Universidad Politécnica de Madrid (UPM)', 'Universidad Adolfo IbÃxa0ñez ', 'Ãx89cole Centrale de Lille', 'Université Paris 13 Nord', 'Università  degli Studi di Udine', 'Universidade Federal de São Paulo', 'Instituto Nacional de Matemática Pura e Aplicada (IMPA)', 'Universität Mannheim', 'Université Toulouse 1 Capitole', 'Technische Universität Braunschweig', 'Eberhard Karls Universität Tübingen', 'Universität Rostock', 'Université Grenoble Alpes', 'Université de Fribourg', 'Universität Innsbruck', 'Universidad Adolfo Ibà ñez ', 'Université du Québec', 'Universidad de la República (Udelar)', 'Universitat Politècnica de Catalunya · BarcelonaTech (UPC)', 'Universität Regensburg', 'Université de Paris', 'Université Paris 1 Panthéon-Sorbonne ', 'Universidad Técnica Federico Santa MarÃxada (USM)', 'Ruprecht-Karls-Universität Heidelberg', 'Pontificia Universidad Católica Argentina', 'UniversitÃxa0Âxa0di Padova', 'Technische Universität Berlin (TU Berlin)', 'Universität Stuttgart', 'Fundação Getulio Vargas (FGV)', 'Universidade de São Paulo', 'Universidad Nacional Autónoma de México  (UNAM)', 'Universidade Federal de São Carlos (UFSCar)', 'Ãx89cole Centrale de Nantes', 'Technische Universität Kaiserslautern', 'Università  degli studi Roma Tre', 'Pontificia Universidad Católica del Perú', 'UniversitÃxa0 degli Studi di Pavia', 'Université PSL', 'Université de Montréal ', 'Pontificia Universidad Católica de ValparaÃxadso', 'University Paris 2 Panthéon-Assas', 'Université Paris-Nanterre', 'Universidad Autónoma de San Luis de PotosÃxad', 'Universität  Leipzig', 'Ruhr-Universität Bochum', 'Université Lumière Lyon 2', 'Université de Lille', 'Université Claude Bernard Lyon 1', 'Université catholique de Louvain (UCLouvain)', 'Université  de Technologie, Troyes (UTT)', 'Universidad de San Andrés - UdeSA', 'Martin-Luther-Universität Halle-Wittenberg', 'University of Tromsø The Arctic University of Norway', 'Rheinische Friedrich-Wilhelms-Universität Bonn', 'Universidad de Alcalá', 'USI - UniversitÃxa0 della Svizzera italiana', 'Linköping University', 'Universidad Nacional de Córdoba - UNC', 'UniversitÃxa0 degli Studi di Perugia', 'Università  degli Studi di Pavia', 'Johannes Gutenberg Universität Mainz', 'Università  Iuav di Venezia', 'Friedrich-Alexander-Universität Erlangen-Nürnberg', 'Université de Nantes', 'Universidad de Córdoba', 'Universidade de BrasÃxadlia', 'Université de Strasbourg', 'Universidad Autónoma de Nuevo León', 'Pontificia Universidad Católica de Chile (UC)', 'Université Paris-Est Créteil Val de Marne', 'Universidad Autónoma del Estado de México (UAEMex)', 'Université de Montpellier', 'Universität der Künste Berlin', 'Università  di Padova', 'Université Paris-Saclay', 'Eötvös Loránd University', 'Technische Universität Bergakademie Freiberg', 'Technische Universität Hamburg', 'Universidade Católica Portuguesa - UCP', 'Ãx89cole Nationale Supérieure des Industries Chimiques (ENSIC), Nancy', 'Instituto Tecnológico Autónomo de México (ITAM)', 'Université de Limoges', 'Université Sorbonne Nouvelle Paris 3', 'Université Paul Sabatier Toulouse III', 'Julius-Maximilians-Universität Würzburg', 'Université de Poitiers', 'Universitat Politècnica de València', 'UniversitÃxa0Âxa0Cattolica del Sacro Cuore', 'Université Nice Sophia Antipolis', 'University of Jyväskylä', "Haute Ecole d\'art et de design de Genève (HEAD)", 'Bauhaus-Universität Weimar', 'Université de Liège', 'Universität Jena', 'University of Göttingen', 'Technische Universität Ilmenau', 'Ãx89cole Centrale de Lyon', 'Ludwig-Maximilians-Universität München', 'Université de Lorraine', 'Université de Technologie de Compiègne (UTC)', "Université Côte d\'Azur", 'Universität Siegen', 'Universität Duisburg-Essen', 'Université de Savoie, Chambery, Annecy', 'Universidad Autónoma de Madrid', 'Università  Cattolica del Sacro Cuore', 'Ankara Ãx9cniversitesi', 'Universidade da Coruña ', 'Università  degli Studi di Perugia', 'Hochschule für Gestaltung und Kunst Zürich', 'Universität Hamburg']

我想把这个特殊字符转换为它们的原始形式,我的意思是:Å、ö、ü、ã、á、è、ê 等。 我知道我必须对这个特殊字符进行一些编码和解码,但我不明白。 我尝试了以下代码,但它没有修复它们:

special_string.encode('utf-8').decode('utf-8')

有谁知道如何在所有不同的"编码"语言中进行此更改? 也许有这个任务的库吗?

正如Deceze所评论的那样,如果数据在源头损坏,则无法保证您可以撤消损坏。 但是,使用您提供的数据,我们可以取得一些进展。

首先,列表中的绝大多数字符串可以通过编码为拉丁-1 然后解码为 UTF-8 来修复。

>>> s = 'Technische Universität Dresden'
>>> s.encode('latin').decode('utf-8')
'Technische Universität Dresden'

这些字符串不能以这种方式解码:

USI - Università della Svizzera italiana
Università degli Studi di Udine
Universidad Adolfo Ibà ñez 
Università degli studi Roma Tre
Università degli Studi di Pavia
Università Iuav di Venezia
Università  di Padova
Università  Cattolica del Sacro Cuore
Università degli Studi di Perugia

值得注意的是,除了一所大学外,其他都是意大利大学。 意大利语中的"大学"是"università"。 让我们尝试通过执行与"修复"相反的操作来破坏它:

>>> s = 'Università'
>>> s.encode('utf-8').decode('latin')
'UniversitÃxa0'

你可以看到我们得到了我们在未固定名称加'xa0'中看到的"UniversitÃ",这是不间断的空格字符 - 这个字符可能被网站或你的抓取工具剥离,导致意大利名字特别腐败。 解决这些问题的最简单方法可能是在尝试修复它们之前将"Ã"替换为"à"。

这就只剩下"阿道夫·伊瓦涅斯大学"±我们认为应该是"阿道夫·伊瓦涅斯大学"。 让我们"破坏"它:

>>> "Universidad Adolfo Ibáñez".encode('utf-8').decode('latin-1')
'Universidad Adolfo Ibáñez'

这看起来与列表中的版本相同,只是反感叹号字符已替换为空格。 我们可以恢复它来修复我们的字符串。

>>> s = 'Universidad Adolfo Ibà ñez'
>>> bs = s.encode('latin-1')
>>> fixed = bs.replace(b'xc3 ', b'xc3xa1').decode('utf-8')
>>> fixed
'Universidad Adolfo Ibáñez'

最新更新