Ich habe eine Datei in UTF-8, die mehrsprachige Texte enthält. Vieles davon sind die Namen von Menschen. Ich muss es in ASCII konvertieren und das Ergebnis muss so anständig wie möglich aussehen.
Es gibt viele Möglichkeiten, um die Konvertierung von einer breiteren in eine engere Codierung zu erreichen. Die einfachste Transformation wäre, alle Nicht-ASCII-Zeichen durch einen Platzhalter wie '_' zu ersetzen. Wenn ich die Sprache kenne, in der die Datei geschrieben ist, gibt es zusätzliche Möglichkeiten, z. B. die Romanisierung.
Welches Unix-Tool oder welche Programmiersprachenbibliothek, die unter Unix verfügbar sind, kann mir eine anständige (bestmögliche) Konvertierung von UTF-8 nach ASCII ermöglichen?
Der größte Teil des Textes ist in europäischen lateinischen Sprachen verfasst.
quelle
iconv
undtr
gibt es Unidecode . Ich bin damit nicht vertraut, aber es kann tun, was Sie wollen, wenn Sie Python verwenden können.Antworten:
Abhängig von den Konvertierungstabellen wird die bestmögliche Konvertierung durchgeführt. Wenn Sie ungefähr die Eingabesprache kennen, gibt es sprachspezifische Filter, die bessere Ergebnisse liefern, z
ist die Umwandlung von Esperanto in die X-Metodo-Darstellung,
wird versuchen, TeX-Darstellung von Diakritika zu tun, gibt es sprachspezifische Parameter:
wird "ä" in "ae" umschreiben anstatt "a"
Verwendet die polnischen Regeln für das Transliterieren von Russisch anstelle der "englischen" usw.
quelle
konwert
Website? Ist es irgendwo verpackt? github.com/taw/konwert/tree/master/konwert-1.8Dies wird für einige Dinge funktionieren:
echo ĥéĺłœ π | iconv -f utf-8 -t ascii//TRANSLIT
kehrt zurückhelloe ?
. Alle Zeichen,iconv
die nicht konvertieren können, werden durch Fragezeichen ersetzt.iconv
ist POSIX, aber ich weiß nicht, ob alle Systeme dieTRANSLIT
Option haben. Es funktioniert für mich unter Linux. Darüber hinaus werden mit dieserIGNORE
Option im Hintergrund Zeichen verworfen, die im Zielzeichensatz nicht dargestellt werden können (sieheman iconv_open
).Eine minderwertige, aber POSIX-konforme Option ist die Verwendung
tr
. Dieser Befehl ersetzt alle Nicht-ASCII-Codepunkte durch ein Fragezeichen. Es liest jeweils ein Byte UTF-8-Text. "É" kann durch "E?
oder " ersetzt werden?
, je nachdem, ob es mit einem kombinierten Akzent oder einem vorkomponierten Zeichen codiert wurde.In diesem Beispiel
caf? ?????
werden vorkompositionierte Zeichen verwendet.quelle
tr
soll nicht ein Byte auf einmal arbeiten. GNU tr tut es, aber es ist ein Fehler.iconv -f utf-8 -t ascii//TRANSLIT
funktionierte gut für mich. Es wurden geschweifte Anführungszeichen in gerade Anführungszeichen geändert. Vielen Dank.//TRANSLIT
auch für andere Zeichensätze funktioniert, ziso-8859-1//TRANSLIT
.iconv
gibticonv: illegal input sequence at position 1234
und schneidet die Datei für mich ab. Wäre schön, wenn es nur den Charakter löschen und versuchen würde, die Sequenz wieder aufzunehmen.Versuchen
uni2ascii -B input.txt >output.txt
uni2ascii
quelle
Sie möchten die folgenden Namen in eine ASCII-Zeichenfolge konvertieren können, gegen die die betreffende Person keine Einwände erheben würde?
Ich vermute, es gibt kein automatisiertes Tool, das das kann. Es kann keine oder sehr viele Lateinisierungen von Personennamen geben. Die Software kann die kulturell akzeptable Version nicht auswählen. Zumindest nicht, ohne dass die Software viel über die Kultur des Betroffenen weiß.
Siehe auch /programming//a/1398403/477035
quelle
perl -e 'use utf8; use Text::Unidecode; print unidecode("عبد الله الثاني بسين")'
produziert `` bd llh lthny bn lHsyn``, was für meine Zwecke gut genug ist.Am Ende habe ich Perl mit Text :: Unidecode verwendet . Beispiel:
produziert
bd llh lthny bn lHsyn
, was für meine Zwecke akzeptables Ergebnis ist.quelle