—
is not em dash, wurde Ihr Text aus dem Bindestrich auf diesen Wert falsch übersetzt.
—
ist die HTML-Dezimalstelle für em dash. Insbesondere verweist es auf den Unicode-Codepunkt 8212, der einen em-Bindestrich darstellt.
- Ihre Datei ist kein ASCII, wenn sie einen Bindestrich enthält. ASCII-Zeichen codieren nur in den Dezimalbereich 0 - 127 und em dash ist kein Zeichen, das durch ASCII-Codierung dargestellt werden kann. Wenn Sie einen Strich als 0x97 (151 im Dezimalformat) gespeichert haben, haben Sie wahrscheinlich eine ANSI-Textdatei (alias Windows Codepage 1252 (w-1252)).
Ihre erste App ...
Die Daten wurden als ein in w-1252 codierter em-Strich gestartet. In w-1252 wird der Em-Strich auf den Dezimalwert 151 abgebildet (0x97 in hex oder 10010111 in binär).
Irgendwann wurde der em dash von Code bearbeitet, der dachte, dass die Bytes in Ihrer Datei ISO-8859-1-kodierten Text waren. Wenn dieser Code 0x97 als Zeichenkette interpretierte, mapped 0x97 to a character according to the iso-8859-1 encoding. In iso-8859-1 0x97 wird auf das Zeichen "Ende des geschützten Bereichs" abgebildet.
Als nächstes wurde die Zeichenkette, die der Code als Steuerzeichen "Ende des geschützten Bereichs" betrachtet, als utf-8 codiert. "End of guarded area" encoded in utf-8 is the two-byte sequence: 0xC2 0x97.
Ihre zweite App ...
Die Textdatei korrekt als w-1252 interpretiert wurde, so dass die 0x97 erkannt wird als em dash, die korrekt als em dash in utf-8 codiert wurde: 0xE2 0x80 0x94 .
Was dieses Verhalten beeinflusst
Nicht sicher, ob Sie mit Web-Anwendungen oder das, was es zu tun, aber das Konzept sollte gleich sein, was auch immer es ist. Wir hatten das gleiche 0x97-> 0xC297-Szenario in einer Web-App, in dem Menschen Daten in ein Formular eingeben. Ich fand, dass der Zeichensatz der Webseite als iso8859-1 deklariert wurde, und der beste Weg des Browsers, die w1252-Zeichen zu behandeln, war, sie einfach wie die iso-Bytes zu senden, ohne den Benutzer oder den Server zu alarmieren. Der Server empfängt die Daten als iso und konvertiert in utf-8, was zu 0xC297 führt.
Grundsätzlich jedes Mal, wenn eine App Text berührt, muss es erzählt werden, wie der Text codiert ist, sonst könnte es auf einen Systemstandard zurückfallen. In diesem Fall riskieren Sie eine Datenbeschädigung.