# Falls Sie eine Website erwarten, aber diesen # Abschnitt lesen können, löschen Sie bitte das # _index.htmx_encmistake # vom Ende der Adresszeile. Danke! Lang: de Title: encmistake: die "digitale" Reise von fehlkodierten Texten nachverfolgen ‒ Prolog-Skript Short Title: encmistake (Prolog) Publication date: 2020-12-06 Meta: en Title: encmistake: Reconstruct the "digital" journey of miscoded texts ‒ Prolog script Short Title: encmistake (Prolog) +INFO >>INFO de 1.0

encmistake: die "digitale" Reise von fehlkodierten Texten nachverfolgen ‒ Prolog-Skript

Grund für die Erstellung des Scripts sind die fehlcodierten Texte, die man manchmal im Internet finden kann und manchmal selbst produziert. Sie sehen z. B. so aus:

 

(in Worten: "Große Erzählung" ‒ "Große Erzählung" wäre hier richtig)

 


Aus Neugier habe ich ein Prolog-Skript geschrieben, welches die möglichen Fehlerentstehungswege durchprobiert. Es ist wie folgt zu downloaden:

Download: encmistake.pl (ca. 20 kB)
Lizenz und Lizenzzusatz: LICENSE, NOTICE

Hier ist ein Beispielaufruf:

me@supermachine:encmistake$ swipl ./encmistake.pl
Welcome to SWI-Prolog (threaded, ...)

?- translate(utf8, "c39f", _, "c383c5b8", D).
D = 'utf8 -> [utf8"="cp1252] -> utf8' ;
D = 'utf8 -> [utf8"="cp1252] -> utf8' ;
false.

?- halt.
me@supermachine:encmistake$ 

Die Programmaussage bedeutet folgendes: Das UTF-8-Zeichen "ß" (= 0xc3 0x9f) war mal korrekt, aber jemand (oder ein Automat) hat entschieden, diesen "CP1252"-Text nach UTF-8 zu konvertieren.

Im folgenden Graphen wird die "Reise des Strings" deutlich:

	Original            fehlinter-     "Konvertierung"          Ergebnis
	                    pretiert       CP1252 => UTF-8        
	0xc3 0x9f          0xc3   0x9f            =            0xc3 0x83 0xc5 0xb8
	---------   --->   ----   ----     -------=------->    --------- ---------
	    |                |      |                              |         |
	    |                |     "Ÿ" codepoint                   |   "Ÿ" codepoint
	    |                |         in CP1252                   |       in UTF-8
	   "ß" codepoint     |                                     |
	       in UTF-8     "Ã" codepoint                         "Ã" codepoint
	                        in CP1252                             in UTF-8
<< >>INFO en 1.0

encmistake: Reconstruct the "digital" journey of miscoded texts ‒ Prolog skript

The reason for the creation of the script were those wrongly encoded texts which you occasionally find on the internet and sometimes produce by yourself. They look like this:

 

(in words: "Große Erzählung" ‒ "Große Erzählung" would be correct.)

 


Out of couriosity I wrote a Prolog script which tries all possible ways of the mistake which could have happened. You can download it here:

Download: encmistake.pl (ca. 20 kB)
Licence and Notice: LICENSE, NOTICE

You can invoke the script like this:

me@supermachine:encmistake$ swipl ./encmistake.pl
Welcome to SWI-Prolog (threaded, ...)

?- translate(utf8, "c39f", _, "c383c5b8", D).
D = 'utf8 -> [utf8"="cp1252] -> utf8' ;
D = 'utf8 -> [utf8"="cp1252] -> utf8' ;
false.

?- halt.
me@supermachine:encmistake$ 

So this tells us that the UTF-8 "ß" (= 0xc3 0x9f) was pretty correct, but someone (or some automaton) decided to convert this "CP1252" text to UTF-8.

See here a graph whith the "journey of the string":

	original         misinterpreted   "transformation"           result
	                                   CP1252 => UTF-8        
	0xc3 0x9f          0xc3   0x9f            =            0xc3 0x83 0xc5 0xb8
	---------   --->   ----   ----    --------=------->    --------- ---------
	    |                |      |                              |         |
	    |                |     "Ÿ" codepoint                   |   "Ÿ" codepoint
	    |                |         in CP1252                   |       in UTF-8
	   "ß" codepoint     |                                     |
	       in UTF-8     "Ã" codepoint                         "Ã" codepoint
	                        in CP1252                             in UTF-8
<<