Ersetzen Sie Sonderzeichen mit ASCII-Äquivalent

Gibt es irgendwelche lib, die Sonderzeichen an ASCII-Äquivalente ersetzen können, wie:

"Cześć" 

nach:

 "Czesc" 

Ich kann natürlich eine Karte erstellen:

 {'ś':'s', 'ć': 'c'} 

Und verwenden Sie einige ersetzen Funktion. Aber ich möchte nicht alle Äquivalente in mein Programm knüpfen, wenn es irgendeine Funktion gibt, die das schon tut.

5 Solutions collect form web for “Ersetzen Sie Sonderzeichen mit ASCII-Äquivalent”

 #!/usr/bin/env python # -*- coding: utf-8 -*- import unicodedata text = u'Cześć' print unicodedata.normalize('NFD', text).encode('ascii', 'ignore') 

Sie können die meiste Zeit erhalten, indem Sie:

 import unicodedata def strip_accents(text): return ''.join(c for c in unicodedata.normalize('NFKD', text) if unicodedata.category(c) != 'Mn') 

Leider gibt es akzentuierte lateinische Buchstaben, die nicht in einen ASCII-Buchstaben zerlegt werden können + Kombinieren von Markierungen. Du musst sie manuell behandeln. Diese beinhalten:

  • Æ → AE
  • Ð → D
  • Ø → O
  • Þ → TH
  • ß → ss
  • Æ → ae
  • Ð → d
  • Ø → o
  • Þ → th
  • Œ → OE
  • Œ → oe
  • Ƒ → f

Versuche das Trans- Paket. Sieht sehr vielversprechend aus. Unterstützt Polnisch.

Ich habe es so gemacht:

 POLISH_CHARACTERS = { 50309:'a',50311:'c',50329:'e',50562:'l',50564:'n',50099:'o',50587:'s',50618:'z',50620:'z', 50308:'A',50310:'C',50328:'E',50561:'L',50563:'N',50067:'O',50586:'S',50617:'Z',50619:'Z',} def encodePL(text): nrmtxt = unicodedata.normalize('NFC',text) i = 0 ret_str = [] while i < len(nrmtxt): if ord(text[i])>128: # non ASCII character fbyte = ord(text[i]) sbyte = ord(text[i+1]) lkey = (fbyte << 8) + sbyte ret_str.append(POLISH_CHARACTERS.get(lkey)) i = i+1 else: # pure ASCII character ret_str.append(text[i]) i = i+1 return ''.join(ret_str) 

Wenn ausgeführt:

 encodePL(u'ąćęłńóśźż ĄĆĘŁŃÓŚŹŻ') 

Es wird so etwas produzieren:

 u'acelnoszz ACELNOSZZ' 

Das funktioniert gut für mich -; D

Das Unicodedata.normalize Gimmick kann am besten als Halb-Assci beschrieben werden. Hier ist ein robuster Ansatz, der eine Karte für Briefe ohne Zersetzung enthält. Beachten Sie die zusätzlichen Karteneinträge in den Kommentaren.

  • Reguläre Ausdrücke und Zeichencodes in Scrapy-Exportdaten
  • Wie kann ich JSON Prozent-Codierung vermeiden und \ u-escaping?
  • Windows cmd Kodierung Änderung verursacht Python Crash
  • Text mit Unicode-Escape-Sequenzen auf Unicode in Python
  • Wie konvertiere ich Unicode in Unicode-Escaped Text
  • Requests.get gibt 403 zurück, während die gleiche URL im Browser funktioniert
  • Python utf-8 japanisch
  • Python-Datei Eingabe String: wie zu behandeln Escaped Unicode-Zeichen?
  • Streifen () und Streifen (String.whitespace) geben unterschiedliche Ergebnisse trotz Dokumentation, was darauf hindeutet, dass sie gleich sein sollten
  • Ausrichtung von weiten ostasiatischen Zeichen mit Formatfunktion
  • MIMEText UTF-8 kodiert Probleme beim Senden von E-Mails
  • Python ist die beste Programmiersprache der Welt.