Kopieren/Einfügen aus Dokumenten (PDF, docx) - seltsames Verhalten von diakritischen Zeichen

Wenn ich Text aus PDF (Vorschau) oder Docx (Seiten) mit tschechischen Zeichen kopiere, werden einige der tschechischen Zeichen kopiert, wobei ihr Akzent „festgeklebt“ wird.

Um das Ganze noch seltsamer zu machen, ist dieses Verhalten ziemlich inkonsistent: Manchmal wird „ř“ gut kopiert, manchmal nicht. Außerdem scheint es nicht mit einer bestimmten Schriftart verbunden zu sein. Aber ich denke , das passiert häufiger bei Schriftarten, die nicht für OSX nativ sind (wie Cambria, die zufällig MS Office-Standard ist).

Screenshot aus dem WordPress-WYSYWIG-Textbereich

Ergebnis von CMD+C für "í": "í́"

Warum passiert das?

Bearbeiten

  • OSX: 10.13.6 (obwohl es mir auf älteren Betriebssystemen und sogar anderen Computern passiert ist)
  • apps, ich habe den Text kopiert aus: Vorschau (PDF), Seiten (doc, docx)
  • apps, in die ich den Text eingefügt habe: irgendetwas (von Sublime-Text bis zum Texteditor in StackExchange, siehe oben)

Außerdem ist mir aufgefallen, dass dies häufig am Ende von Wörtern (möglicherweise am Ende von Zeilen) passiert. Ich werde dies bestätigen, sobald es wieder passiert, da das Verhalten frustrierend schwer zu reproduzieren ist.

Können Sie erklären, was Ihr Prozess ist? Eine .docx-Datei mit Pages öffnen, dann als PDF exportieren und dann kopieren/einfügen? Wo?
Öffnen Sie eine .docx-Datei mit Pages (wie dies beispielsweise auch bei anderen Tools der Fall ist), kopieren Sie den Text und fügen Sie ihn so ziemlich überall ein (sei es Sublime-Text, WordPress TinyMCE-Editor oder irgendetwas anderes).
Dieses Verhalten tritt manchmal in doc/docx auf (wie oben beschrieben), manchmal in pdf (z. B. in der Vorschau geöffnet). Ich habe leider kein MS Word installiert, daher kann ich das Einfügen des Textes dort nicht testen.
@TomGewecke, ich habe meine Frage mit diesen Details bearbeitet. Danke schön!
Macht die Verwendung von Adobe Reader anstelle von Preview einen Unterschied? Das ist der Goldstandard für PDF.

Antworten (2)

Womit Sie es zu tun haben, ist eines der vielen Symptome dessen, was ich als den Fluch der Existenz eines jeden modernen Programmierers betrachte: Unicode-Normalisierung und Austausch von Zeichenkodierungen.

Man könnte buchstäblich ein 1000-seitiges Buch nur über die Geschichte dieses Chaos schreiben (und ich wäre nicht überrascht, wenn es jemand schon getan hätte), also werde ich es auf die Grundlagen dessen reduzieren, was Sie hier antreffen (und ich Ich werde ein bisschen zu stark vereinfachen), aber dann gebe ich Ihnen einige Links zum "weiteren Lesen".

Stellen Sie zunächst sicher, dass Sie Ihr Eingabemenü in Ihrer Menüleiste haben: Öffnen Sie in den Systemeinstellungen das Tastatureinstellungsfenster und aktivieren Sie das Kontrollkästchen unter "Eingabequellen". Öffnen Sie dann von diesem Menüpunkt aus das, was jetzt "Emoji und Symbole anzeigen" heißt. Wählen Sie oben links im Fenster "Liste anpassen", gehen Sie zu "Codetabellen" und aktivieren Sie "Unicode" und "ISO-8859-1". Wir halten einen kurzen Vortrag und dann eine Demo.

Auch hier gibt es also zwei miteinander verbundene, aber getrennte Probleme:

1. Zeichencodierungen

Ich halte dies für die Hauptursache dieses speziellen Problems. Das Problem ist, dass Microsoft seit Jahren dafür berüchtigt ist, Unicode nicht gut zu handhaben, weil seine Plattformen mehr oder weniger bei der Verwendung einer älteren Implementierung mehrsprachiger Zeichensätze geblieben sind, die verschiedentlich als "breite Zeichen", UCS-2 oder UTF-16 bekannt sind. Dieses System wurde vor Jahren implementiert, als man dachte, dass 16 Bit (zur Darstellung von ~65.000 Zeichen) ausreichen würden, um jedes Symbol zu codieren, das wir jemals brauchen würden. Heute gibt es 1.114.112 standardisierte Unicode-Symbole.

Heutzutage verwenden die meisten Systeme (und alles von Apple) eine Codierung namens UTF-8, eine Zeichencodierung mit variabler Breite , bei der es keine festgelegte Anzahl von Bits gibt, um ein bestimmtes Zeichen zu codieren. Dadurch ist es abwärtskompatibel mit ASCII und kann auch nach Belieben neue Symbole und Zeichen hinzufügen.

Wenn also Text in und aus Programmen kopiert wird, die einen anderen Zeichensatz verwenden (wie der von Microsoft), muss der Zeichensatz komplett neu codiert und konvertiert werden, ein Prozess, der traditionell als , bekannt ist, obwohl es buchstäblich Dutzende von Implementierungen dafür iconvgibt erledigt.

2. Unicode-Kombinationszeichen

Das Problem der Codierungen wird durch die Tatsache verschärft, dass sich der Unicode-Standard im Laufe der Jahre weiterentwickelt hat und erkannt hat, dass es am besten sein könnte, einige zu haben, um die Anzahl der eindeutigen Zeichen auf "nur" Millionen statt Milliarden zu beschränken Zeichen sind "Kombinationszeichen", Zeichen, die das vorherige auf reguläre Weise modifizieren. Auf diese Weise benötigen Sie nicht für jeden Buchstaben mit jeder Akzentvariante einen eigenen Eintrag, sondern fügen dem ursprünglichen Zeichen einfach ein „gemeinsames“ Akzentzeichen hinzu. Aber es wurde nicht immer so gemacht, daher gibt es mehrere Möglichkeiten, dasselbe Symbol zu erzeugen. Deins ist das perfekte Beispiel.


Wir beginnen mit dem Symbol LATEINISCHER KLEINBUCHSTABE I (U+0069):

i

Wenn Sie jetzt den Akut-Akzent hinzufügen möchten, ersetzt Microsoft ihn durch

Lateinischer Kleinbuchstabe I mit Akut (U+00ED):

í

Aber Apple fügt stattdessen ein zweites Zeichen hinzu, COMBINING ACUTE ACCENT (U+0301):

́

Sie können dies selbst tun (hier kommt der Character Viewer ins Spiel). Geben Sie einfach ein ein i, suchen Sie dann combining acutein der Zeichenanzeige, doppelklicken Sie auf das Symbol und voila:

Das ist tatsächlich völlig anders als das erste Symbol oben. Es ist der LATEINISCHE KLEINBUCHSTABE I (U+0069), gefolgt von AKUTEM KOMBINATIONSAKZENT (U+0301). Kopieren Sie sie und fügen Sie sie in den Zeichenbetrachter ein, und Sie werden sehen, was ich meine.

Ja, beide repräsentieren visuell dasselbe Symbol. Aber wenn irgendwann (normalerweise ungefähr zur gleichen Zeit wie die Zeichensatzkonvertierung) ein UTF-8-Prozess das Kombinationszeichen hinzufügt, aber das ursprüngliche vorkombinierte Zeichen beibehalten wird? Das heißt, was passiert, wenn der Ansatz der "kombinierten Symbole" irgendwie zur Legacy-Version hinzugefügt wird, anstatt sie zu ersetzen ? Nun, der Akzent „kombinierender Charakter“ wird immer noch seinen Job machen wollen.

Wenn man also den LATEINISCHEN KLEINBUCHSTABEN I MIT AKUT (U+00ED) mit AKUTEM AKZENT (U+0301) kombiniert:

í́

Und da haben Sie es.

Es gibt eine sehr berühmte Stack Overflow-Antwort, die zeigt, wie weit dies gehen kann.


Etwas leichte Lektüre:

Geoff, ich liebe deine Erklärung, wie wir zu dieser í́Situation kommen. :) Danke und Entschuldigung, dass ich dir das Kopfgeld nicht zusprechen konnte (da du es definitiv verdient hast), ich habe das Zeitlimit nicht erwischt ...

Beim Kopieren/Einfügen aus PDF-Dateien kann die Behandlung von Nicht-ASCII-Zeichen durch den jeweiligen PDF-Erstellungsprozess verpfuscht werden. Ohne Informationen darüber, wie Ihre PDF-Dateien generiert wurden, wie z. B. die Codierung und die verwendeten Schriftarten, ist es schwierig festzustellen, warum die Ergebnisse nicht korrekt sind.

Ja, ich weiß, dass es wirklich schwer ist, das Problem zu lokalisieren, wenn es so zufällig auftritt. Ich hoffte, jemand hätte ähnliche Erfahrungen, die ein wenig Licht ins Dunkel bringen könnten, was dort vor sich geht.