Dies ist, was eine „Ligatur“ genannt wird.
Beim Drucken wurden die f- und l-Zeichen mit unterschiedlichem Abstand zwischen den normalen Paaren sequentieller Buchstaben gesetzt. In der Tat würden f und l zu einem Zeichen verschmelzen. Andere Ligaturen umfassen "th", "oe" und "st".
Das ist, was Sie in Ihrer Eingabe bekommen - die "fl" Ligatur, UTF-8 codiert. Es ist eine Drei-Byte-Sequenz. Ich würde ein kleines Problem mit Ihrer Behauptung nehmen, dass es "nicht ist, tatsächlich fl
" - es ist wirklich, aber Ihre Eingabe ist UTF-8 und nicht ASCII :-). Ich vermute, dass Sie aus einem Word-Dokument oder einem E-Book eingefügt oder etwas, das für die Präsentation statt Datentreue (oder vielleicht, aus dem Inhalt, war es eine LaTeX-generierte PDF?).
Wenn Sie in diesem speziellen Fall behandeln möchten, können Sie diese Bytefolge durch die ASCII-Buchstaben "fl" ersetzen. Wenn Sie alle solche Fälle behandeln möchten, müssen Sie die "UNIDATA" -Datei des Unicode-Konsortiums verwenden: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt. In dieser Datei gibt es eine Spalte für die "Zerlegung" eines Zeichens. Die f-I-Ligatur hat die Kennung "LATIN SMALL LIGATURE FL". Es gibt übrigens ein Python-Modul für diese Datendatei unter https://docs.python.org/2/library/unicodedata.html. Sie wollen die "Zersetzung" Funktion:
>>> import unicodedata
>>> foo = u"fluphenazine"
>>> unicodedata.decomposition(foo[0])
'<compat> 0066 006C'
0066 006C ist natürlich, ASCII 'f' und 'l'.
Beachten Sie, dass Sie einen schlechten Tag haben werden, wenn Sie versuchen, UTF-8-Daten in ASCII zu konvertieren. Es gibt nur 127 ASCII-Zeichen und UTF-8 hat Millionen zu Millionen von Codepunkten. Es gibt viele Codepoints in UTF-8, die nicht ohne weiteres als ASCII dargestellt werden können - wer will, dass ein Text mit "<TREBLE CLEF> <SNOWMAN> <AIRPLANE> <YELLOW SMILEY FACE>
" endet?