{"id":3377,"date":"2011-09-02T06:34:01","date_gmt":"2011-09-02T04:34:01","guid":{"rendered":"https:\/\/www.herr-rau.de\/wordpress\/?p=3377"},"modified":"2023-05-14T07:44:20","modified_gmt":"2023-05-14T05:44:20","slug":"iso-8859-1-utf-8-und-wordpress","status":"publish","type":"post","link":"https:\/\/www.herr-rau.de\/wordpress\/2011\/09\/iso-8859-1-utf-8-und-wordpress.htm","title":{"rendered":"ISO 8859-1, UTF-8 und Wordpress"},"content":{"rendered":"<div style='text-align:right;'><small>(<a href='https:\/\/www.herr-rau.de\/wordpress\/2011\/09\/iso-8859-1-utf-8-und-wordpress.htm#comments'>7 Kommentare.<\/a>)<\/small> <\/div>\n<p class=\"wp-block-paragraph\">(<a href=\"#sql\">Theoretischen Teil \u00fcberspringen und gleich zur L\u00f6sung der Aufgabe springen, die im Titel angek\u00fcndigt wird. Aber das ist nur f\u00fcr technische Blogbastler interessant.<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><small>Inzwischen ist aus einem kurzen Eintrag ein langer geworden, und er erkl\u00e4rt nicht mehr das, was er am Anfang sollte. Ich sollte ihn wirklich k\u00fcrzen und neu strukturieren. Der Unterschied zwischen Profi und Amateur: ich werd&#8217;s einfach nicht tun. Trotzdem, f\u00fcr Informatik &#8211; Repr\u00e4sentation von Information &#8211; w\u00e4re das schon praktisch.<\/small><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. Einf\u00fchrung<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn man am Computer etwas schreibt &#8211; im Textverarbeitungsprogramm oder im Blog &#8211; ist ein &#8222;a&#8220; nie nur ein &#8222;a&#8220;. Man dr\u00fcckt zwar die entsprechende Taste auf der Tastatur und ein &#8222;a&#8220; erscheint. Wenn man das dann speichert, wird ein &#8222;a&#8220; gespeichert. Sollte man meinen, aber das ist nicht so. Das hat jeder schon mal gemerkt, dem es die Umlaute beim Speichern verhagelt hat, oder der eine Mail kriegt, in der solche S\u00e4tze auftauchen:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">ich w\ufffdrde es begr\ufffd\ufffden, wenn du mir nicht so etwas schreiben w\ufffdrdest<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">oder in der einem<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Viele Gr\u00c3\u00bc\u00c3\u0178e<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">gew\u00c3\u00bcnscht werden. (Sieht man auch immer wieder mal bei Track- oder Pingbacks in Blogs.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wer ist da schuld, was ist da passiert, wie kann man das vermeiden?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Einen ausgezeichneten \u00dcberblick zu diesem Thema gibt <a href=\"http:\/\/www.joelonsoftware.com\/articles\/Unicode.html\">&#8222;The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)&#8220;<\/a>. Ich habe mich f\u00fcr diesen Artikel sehr bei ihm bedient &#8211; dort steht das alles noch viel ausf\u00fchrlicher und interessanter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hier eine Kurzfassung und ein paar wichtige Begriffe.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. ASCII<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Zeichen werden wie alles im Computer durch Zahlen repr\u00e4sentiert. Ein fr\u00fcher Standard dazu hie\u00df ASCII (<a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/de\/wiki\/American_Standard_Code_for_Information_Interchange\">Wikipedia<\/a>). Nach diesem Kodierungssystem werden f\u00fcr jedes Zeichen 7 bit reserviert, was einen Vorrat von 128 m\u00f6glichen Zeichen erm\u00f6glicht. Die Zeichen mit den Nummern 0 bis 31 sind Sonderf\u00e4lle, sogenannte nicht druckbare Zeichen, aber von Nummer 32 bis 126 sehen die Zeichen vertraut aus:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>&nbsp;!\"#$%&amp;'()*+,-.\/0123456789:;&lt;=&gt;?<\/code>&nbsp;&nbsp;&nbsp;<small>(Nr. 32-63)<\/small><br><code>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_<\/code>&nbsp;&nbsp;&nbsp;<small>(Nr. 64-95)<\/small><br><code>`abcdefghijklmnopqrstuvwxyz{|}~&nbsp;<\/code>&nbsp;&nbsp;&nbsp;<small>(Nr. 96-126)<\/small><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Zeichen mit der Nummer 32 ist das Leerzeichen, das gro\u00dfe A hat die Nummer 65, die Tilde ist die Nummer 126. (Die Nummer 127, das letzte der 128 ASCII-Zeichen, ist wieder ein Sonderfall.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gespeichert wird ein Wort, zum Beispiel &#8222;Abel&#8220;, als Folge der ASCII-Zeichen-Nummern: 65-98-101-108.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Allerdings fehlen bei diesem System europ\u00e4ische Sonderzeichen &#8211; Buchstaben mit Umlauten und Akzenten und noch exotischeres Zeug. Zur L\u00f6sung gab es zwei M\u00f6glichkeiten: Entweder man schafft einen eigenen europ\u00e4ischen ASCII-Dialekt, bei dem die Nummer 93 eben nicht f\u00fcr &#8222;]&#8220; steht, sondern f\u00fcr &#8222;\u00dc&#8220;. Dann k\u00f6nnen auch Deutsche wunderbar schreiben, m\u00fcssen daf\u00fcr aber auf eckige Klammern verzichten. Au\u00dferdem m\u00fcssen sich Sender und Empf\u00e4nger von Texten (und jedes Textverarbeitungsprogramm f\u00fcr sich) dar\u00fcber verst\u00e4ndigen, ob ein Dokument oder auch nur ein Wort in amerikanischem oder europ\u00e4ischem ASCII zu lesen sein soll. Sonst liest der Amerikaner versehentlich &#8222;]bel&#8220; statt &#8222;\u00dcbel&#8220;, wenn er eine europ\u00e4ische Datei oder Mail \u00f6ffnet. Gespeichert wird das Wort ja als Folge der ASCII-Nummern der einzelnen Zeichen, also &#8222;93-98-101-108&#8220;, und ob das jetzt &#8222;]bel&#8220; oder &#8222;\u00dcbel&#8220; hei\u00dfen soll, das kann der Computer nicht so einfach wissen, wenn man ihm es nicht sagt. Und ein Franzose oder D\u00e4ne braucht wieder einen eigenen ASCII-Dialekt.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3. ISO 8859-1<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Die andere L\u00f6sung war die, f\u00fcr jedes Zeichen 8 bit zu reservieren statt 7. Damit hat man immerhin einen Vorrat von 256 Zeichen zur Verf\u00fcgung, muss also nicht zugunsten eines &#8222;\u00dc&#8220; auf ein &#8222;]&#8220; verzichten und kann beides benutzen. Die ersten 128 Zeichen blieben dabei parallel zu ASCII. Das ist praktisch, weil die in 7-bit-ASCII gespeicherten Dateien dann genauso gut von einem 8-bit-System gelesen werden k\u00f6nnen, ohne dass man irgendetwas umstellen muss.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Allerdings gibt es auch wieder verschiedene 8-bit-Varianten. MS-DOS hatte sein eigenes System, Windows wieder ein anderes. (Deshalb sehen die Umlaute in unter MS-DOS erzeugten Dateien falsch aus, wenn man die Dateien als \u00fcbliche Windowsdateien betrachtet.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Verbreitet ist heute ISO 8859-1 (&#8222;Latin 1&#8220;, <a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/de\/wiki\/ISO_8859-1\">Wikipedia<\/a>). Da sind weiterhin f\u00fcr jedes Zeichen 8 bit reserviert; es gibt also 256 Zeichen, die ersten 128 entsprechen dabei ASCII &#8211; das ist praktisch. Man wird also weiterhin &#8222;65-98-101-108&#8220; als &#8222;Abel&#8220; lesen. Zu den anderen Zeichen geh\u00f6ren europ\u00e4ische Umlaute, Zeichen mit Akzent, skandinavischen Zeichen, und andere. Aber auch nicht alle: das Euro-Zeichen geh\u00f6rt nicht dazu. Aber auch da gibt es Aushilfen (etwa ISO 8859-15), so dass ISO 8859-1 ausreicht f\u00fcr (laut Wikipedia):<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Afrikaans, Albanisch, Baskisch, D\u00e4nisch, Deutsch, Englisch, F\u00e4r\u00f6isch, Finnisch, Franz\u00f6sisch, Irisches G\u00e4lisch, Isl\u00e4ndisch, Italienisch, Katalanisch, Niederl\u00e4ndisch, Norwegisch, Portugiesisch, R\u00e4toromanisch, Schottisches G\u00e4lisch, Schwedisch, Spanisch, Swahili und Wallonisch.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Kyrillisch geht mit ISO 8859-5, Mitteleurop\u00e4isch (darunter Ungarisch, Tschechisch, Polnisch) mit ISO 8859-2.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Viele polnische Seiten sind also, vermuten wir erst einmal, in ISO 8859-2 kodiert. Da ist das Zeichen Nummer 163 das hier: &#8222;\u0141&#8220;. (Wird die gespeicherte Seite als ISO 8859-1 interpretiert, w\u00fcrde an derselben Stelle das Zeichen mit der ISO-Nummer 163 aber so dargestellt werden: &#8222;\u00a3&#8220;.)<br>Man kann das schnell mal ausprobieren: in jedem Browser kann man von Hand die Kodierung einstellen, in Firefox unter &#8222;Ansicht\/Zeichenkodierung&#8220;. Da kann man dieselbe Seite mal so betrachten, als sie in ISO 8859-2 geschrieben, mal als sei sie ISO 8859-1. (Beispiel: <a href=\"http:\/\/www.bobibobi.13tka.com\/\">polnische Seite in ISO 8859-2 kodiert<\/a>.)<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Exkurs:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Aber woher wei\u00df der Browser denn am Anfang, wie er die Seite darstellen soll. Ob der Seitenersteller ein &#8222;\u0141&#8220; oder ein &#8222;\u00a3&#8220; darstellen will? Die Kurzfassung: im schlimmsten Fall r\u00e4t er, aber normalerweise steht im Kopf einer sauber geschriebenen HTML-Seite, welche Kodierung der Browser zur Darstellung nehmen soll, etwa so:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>&lt;meta http-equiv=\"Content-Type\" content=\"text\/html; charset=ISO-8859-1\"&gt;<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(Bis zu dieser Stelle wei\u00df der Browser aber noch nicht, wie die Seite kodiert ist, muss also stillschweigend davon ausgehen, dass er wenigsten diese Stelle schon mal richtig dekodiert hat. Interessante Frage, das.)<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Quizfrage<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Wie habe ich es denn geschafft, sowohl das Zeichen &#8222;\u0141&#8220; als auch ein &#8222;\u00a3&#8220; auf dieselbe Seite zu kriegen? Beide Zeichen sind doch die Nummer 163? Das geht mit reinem ISO 8859-1 tats\u00e4chlich nicht, und mit reinem ISO 8859-2 ebensowenig. Eine L\u00f6sung bietet HTML: da gibt es die M\u00f6glichkeit, Zeichen direkt auszuw\u00e4hlen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>&amp;Lstrok; wird in HTML immer so dargestellt: \u0141<\/li>\n\n\n\n<li>&amp;pound; wird in HTML immer so dargestellt: \u00a3<\/li>\n\n\n\n<li>&amp;Auml; wird in HTML immer so dargestellt: \u00c4<\/li>\n\n\n\n<li>&amp;ouml; wird in HTML immer so dargestellt: \u00f6<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Das funktioniert immer und unabh\u00e4ngig von der Kodierung, jedenfalls solange das &amp; und die folgenden Zeichen richtig erkannt werden, die deshalb alle aus dem gemeinsamen Zeichenvorrat kommen. F\u00fcr viele Sonderzeichen gibt es in HTML solche festen Zeichen, <a href=\"http:\/\/de.selfhtml.org\/html\/referenz\/zeichen.htm\">hier eine Liste davon<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das ist aber nicht die einzige L\u00f6sung f\u00fcr dieses Problem.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4. Unicode<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Meine eigene Seite ist jetzt aber gar nicht mal in ISO 8859-1 kodiert, und die meisten polnischen Seiten, die ich gefunden habe, sind ebensowenig in ISO 8859-2 kodiert, sondern in wieder etwas anderem: UTF-8.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Um das zu erkl\u00e4ren, muss ich etwas zu Unicode sagen. Unicode geht die Sache mit den Zeichen von einer anderen Seite aus an: jedes Zeichen auf der Welt kriegt eine eindeutige Unicode-Nummer, einen sogenannten <em>code point<\/em>. Das sind zur Zeit laut Wikipedia \u00fcber 109.000 Zeichen aus 93 Alphabeten, einschlie\u00dflich Linear B, Ph\u00f6nizisch und I-Ging-Hexagramme. Die Zeichen des Voynich-Manuskripts und <a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/en\/wiki\/Tengwar\">Tengwar<\/a> (Tolkiens Elbenschrift) sind aber noch nicht dabei; f\u00fcr letzteres l\u00e4uft gerade ein Aufnahmeantrag.<br><a href=\"http:\/\/www.babelstone.co.uk\/Unicode\/unicode.html\">Hier kann man sie sich alle anschauen<\/a>. Platz ist im Unicode-System f\u00fcr mehr als eine Million Zeichen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das ist nat\u00fcrlich eine sprachwissenschaftlich und politisch nicht uninteressante Sache: was ist ein Buchstabe, was geh\u00f6rt zu einem Alphabet? Unicode wird deshalb auch kritisiert (Wikipedia <a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/de\/wiki\/Unicode#Kritik\">deutsch<\/a>, mehr bei <a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/en\/wiki\/Unicode#Issues\">englisch<\/a>). Trotzdem ist das mit dem Unicode eine praktische Sache: jeder Buchstabe kriegt eine platonische Entsprechung als <em>code point<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Buchstabe A des lateinischen Alphabets hat zum Beispiel den code point <code>U+0041<\/code>. Die Zahl ist dabei im Hexadezimalsystem zu lesen, 0041 entspricht im Dezimalsystem der Zahl 65. Wie schon damals im ASCII-Code&#8230; denn ja, die <em>code points<\/em> der lateinischen Buchstaben ohne diakritische Zeichen entsprechen den alten ASCII-Nummern.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Zeichen U+03B2 sieht bei mir im Browser so aus: \u03b2, das Zeichen U+00DF so: \u00df. In manchen Schriftarten m\u00f6gen die Zeichen sehr \u00e4hnlich sein, aber die Codierung macht klar: das eine ist ein beta, das andere ein sz\/scharfes s. Wenn f\u00fcr das Unicode-Zeichen in meinem Browser kein Zeichensatz vorgesehen ist, sieht man stattdessen so etwas Komisches wie hier bei U+010900, dem ersten Buchstaben des ph\u00f6nizischen Alphabets: \ud802\udd00. Zur Darstellung m\u00fcsste ich mir dann wohl mal einen passenden Zeichensatz herunterladen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(Fu\u00dfnote: Zeichens\u00e4tze auch f\u00fcr exotischere Unicode-Codepoints findet man leicht. Code2000 bzw. desssen Nachfolger &#8211; <a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/en\/wiki\/Code2000\">Wikipedia dazu <\/a> &#8211; werden wohl nicht mehr weiter aktualisiert, versuchen aber, m\u00f6glichst viele Zeichen darzustellen.)<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">UTF-8<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Unicode ist allerdings erst mal nur ein Verzeichnis aller Zeichen und eine eindeutige Zuweisung eines <em>code points<\/em>. Wie man das dann speichert, ist wieder eine andere Frage, unsere alte Frage von oben, nur dass ich halt nicht &#8222;A&#8220; einer Zahl zuordnen muss (z.B. A=&gt;65), sondern &#8222;U+0041&#8220; (z.B. U+0041=&gt;65).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Da gibt es UTF-32, bei dem f\u00fcr jedes Zeichen 32 bit (4 Byte) reserviert werden. Damit kann man f\u00fcr jedes Zeichen aus einem Pool von 2<sup>32<\/sup> Buchstaben ausw\u00e4hlen, also 4 294 967 296. Das reicht f\u00fcr alle Unicode-Zeichen, aber 32 bit pro Zeichen sind eine ganze Menge Platzverschwendung. Viel verbreiteter ist dagegen UTF-8: da sind die h\u00e4ufigsten Zeichen mit 8 bit kodiert &#8211; wir ahnen es schon, das sind unsere alten Freunde aus dem 7-bit-ASCII-Zeichensatz, n\u00e4mlich die Unicode-Zeichen 0-127. Die weniger h\u00e4ufigen Zeichen sind dann im 16-bit-Bereich kodiert, darunter die Umlaute. Und die selteneren Zeichen sind bei UTF-8 mit bis zu vier Byte kodiert. Das hei\u00dft, dass ein Dokument aus hundert seltenen Zeichen viermal so viel Speicherplatz ben\u00f6tigen kann wie eines aus h\u00e4ufigen Zeichen. Selten jedenfalls aus amerikanischer Sicht.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(Fu\u00dfnote: Hier <a href=\"http:\/\/www.fileformat.info\/info\/unicode\/char\/10900\/index.htm\">sieht man die verschiedenen Kodierungsm\u00f6glichkeiten<\/a> etwa von U+10900.)<a name=\"sql\"><\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">5. MySQL-Datenbank von ISO auf UTF-8 umstellen, und wie ich \u00fcberhaupt auf diesen Kram komme<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Das Blogsystem Wordpress speichert die Beitr\u00e4ge nicht als Datei auf einer Festplatte ab, sondern in einer <strong>Datenbank<\/strong>. Aber auch dazu muss man wissen, welche Kodierung zum Speichern verwendet wird &#8211; damit man die gleiche Kodierung zum Lesen verwenden kann. Wenn ich ein Dokument in ISO 8859-1 in der Datenbank speichere und danach beim Herauslesen als UTF-8 interpretiere, kriege ich Schwierigkeiten bei den Umlauten und Sonderzeichen, andersrum nat\u00fcrlich ebenso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Standardm\u00e4\u00dfig<\/strong> war <strong>fr\u00fcher<\/strong> bei Wordpress-Installationen <strong>ISO 8859-1<\/strong> als Kodierung f\u00fcr die Datenbank eingestellt. Das hei\u00dft, wenn ich ein &#8222;A&#8220; getippt habe, wurde das letztendlich als 65 gespeichert (hexadezimal: 41), wenn ich ein &#8222;\u00f6&#8220; getippt habe, dann wurde das letztendlich als 246 gespeichert (hexadezimal: F6). Wenn ich den in der Datenbank gespeicherten Eintrag dann wieder lese, wird die 65 als &#8222;A&#8220; interpretiert (in ISO, aber auch in UTF-8 und in ASCII), die 246 wird als &#8222;\u00f6&#8220; interpretiert &#8211; aber eben nur in ISO, nicht in UTF-8, wo ein &#8222;\u00f6&#8220; durch 50070 repr\u00e4sentiert wird (hexadezimal: c396) und 246 \u00fcberhaupt nicht definiert ist. Dann werden stattdessen kleine Rauten mit Fragezeichen darin angezeigt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(MySQL-Experten m\u00f6gen mir die grobe Vereinfachung verzeihen.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Inzwischen<\/strong> ist die Standard-Kodierung bei Wordpress-Installationen <strong>UTF-8<\/strong>. Und das hat bei meinem ISO-Wordpress <strong>zu Problemen gef\u00fchrt<\/strong>. Ich wei\u00df auch nicht, woran das liegt &#8211; aber immer wieder mal ist ein Blogbeitrag beim Speichern falsch kodiert worden. Alle Umlaute hat&#8217;s mir verhagelt. Das war sehr l\u00e4stig. <a href=\"http:\/\/bueltge.de\/wp-content\/download\/wk\/utf-8_kodierungen.pdf\">Auf dieser Tabelle<\/a> sieht man links das geschriebene Zeichen (ISO), rechts das, was gespeichert wurde (n\u00e4mlich f\u00e4lschlicherweise als UTF). Ich tippte ein &#8222;\u00fc&#8220;, das nach ISO-Kodierung letztendlich als (hexadezimal) fc gespeichert werden m\u00fcsste, tats\u00e4chlich wurde es aber nach UTF-Kodierung letzendlich als (hexadezimal) c3bc gespeichert &#8211; und aus diesen zwei Byte werden, wenn man das dann als ISO liest, eben \u00c3 und \u00bc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Also wollte ich meine Datenbank von ISO auf UTF-8 umstellen. Das ist aber gar nicht so einfach. Es gibt eine Reihe von Plugins dazu. Ich habe einige davon ausprobiert; <em> sie funktionieren alle nicht.<\/em> Das steht auch so bei Wordpress selber, wo diese Seite eine Anleitung dazu gibt, wie man die Kodierung der Datenbank umstellt:<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/codex.wordpress.org\/Converting_Database_Character_Sets\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Und die Seite ist gespickt mit: &#8222;Tu&#8217;s nicht&#8220; und &#8222;Es ist schwierig&#8220;, und das ist tats\u00e4chlich auch knifflig. Sehr umst\u00e4ndlich. Manche Spalten mancher Tabellen m\u00fcssen in ein exotischeres Format kopiert werden, und von diesem wieder zur\u00fcck ins andere Format kopiert werden. Aber nicht alle, und nicht alle gleich. Ich w\u00fcrde die Finger davon lassen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es geht n\u00e4mlich auch einfacher, jedenfalls f\u00fcr schlichte Wordpressbenutzer wie mich.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Deshalb hier meine schlichte L\u00f6sung f\u00fcr das Konvertieren einer Datenbank von ISO 8859-1 nach UTF-8:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Eine zweite, leere Datenbank anlegen. In die kommt sp\u00e4ter die UTF-8-Version, die Original-DB lassen wir unangetastet.<\/li>\n\n\n\n<li>Die Originaldatenbank als SQL-Dump herunterladen.<\/li>\n\n\n\n<li>Der SQL-Dump ist eine &#8211; m\u00f6glicherweise lange &#8211; Textdatei im ISO-Format. Das war ja unser Problem. Diese ISO-Datei mit einem geeigneten Textverarbeitungsprogramm \u00f6ffnen und als Unicode-Datei speichern.<br>&#8212; Das geht bei Windows einfach mit <strong>WordPad<\/strong>: &#8222;Speichern unter&#8220;, Format &#8222;Unicode-Textdokument&#8220;. Das wird dann \u00fcbrigens wohl eine UTF-16-Datei, mit zwei Byte pro Zeichen. Das geht auch mit <strong>Notepad++<\/strong>, mein Standardwerkzeug daf\u00fcr. Eine Schwierigkeit ist allerdings, dass man nicht unbedingt sieht, was da wirklich im Text steht, da ein \u00fc sinnvollerweise immer als \u00fc gezeigt wird, egal ob es tats\u00e4chlich so aussieht: \u00c3\u00bc (UTF) oder so: \u00fc (ISO). Wobei &#8222;tats\u00e4chlich&#8220; nat\u00fcrlich das falsche Wort ist.<\/li>\n\n\n\n<li>In der neu entstandenen Datei sollten jetzt alle Umlaute so komisch aussehen, n\u00e4mlich durch zwei andere Zeichen repr\u00e4sentiert &#8211; wenn ich die Datei nicht als Unicode-Datei betrachte.<\/li>\n\n\n\n<li>Diesen neuen SQL-Dump jetzt in die frische Datenbank hochladen. Zuvor mit Suchen\/Ersetzen schauen, ob beim Anlegen der Tabellen in den SQL-Befehlen als Zeichensatz oder Kollation ISO\/Latin 1 angegeben ist; das muss dann nat\u00fcrlich raus. (Hier gab es bei mir Schwierigkeiten. Erstens, weil die Datei recht gro\u00df ist. Zweitens, einfach so. Aber der Download mit phpMyAdmin und der Upload mit <a href=\"http:\/\/www.heidisql.com\/\">HeidiSQL<\/a> danach hat geklappt.)<\/li>\n\n\n\n<li>Fertig. Die config.php mit den Zugangsdaten zur zweiten Datenbank versehen und schauen, ob das Blog mit der neuen Datenbank funktioniert. Dabei muss man Wordpress in den Einstellungen sagen, dass ab jetzt UTF-8 gilt und nicht mehr ISO. Dann &#8211; aber erst dann &#8211; kann man die urspr\u00fcngliche Datenbank l\u00f6schen.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Das darf man alles bestimmt nicht. Und es f\u00fchrt zu gr\u00e4sslichen Datenbanken, Greueln im Auge des Herrn. Furchtbaren Hybriden oder so etwas. Ausprobieren auf eigene Gefahr, und ein paar SQL-Kenntnisse sind sicher hilfreich. Wer viel SQL kann, der wird sicher laut lachen und sagen, dass das alles doch viel einfacher geht.<br>Aber was soll ich sagen: bei mir funktioniert&#8217;s.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"507\" height=\"494\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/iso_uni_hex.png\" alt=\"\" class=\"wp-image-3399\" title=\"iso_uni_hex\" srcset=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/iso_uni_hex.png 507w, https:\/\/www.herr-rau.de\/wordpress\/archiv\/iso_uni_hex-150x146.png 150w\" sizes=\"auto, (max-width: 507px) 100vw, 507px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>Anhang, nachtr\u00e4glich:<\/em><\/strong><br>Mit einem Hex(adezimal)-Editor kann man sich anschauen, wie auf der Festplatte gespeicherte Dateien wirklich aussehen. (Na ja, wirklicher jedenfalls.) Hier zwei Textdateien in einem Hex-Editor dargestellt, die nur aus dem Text &#8222;Das ist ein \u00dcbel.&#8220; bestehen. Entschuldigung, ich wollte ein gro\u00dfes \u00dc drin haben.<br><br>Die obere Datei ist in Windows-1225 gespeichert, das ISO-8859-1 sehr \u00e4hnlich ist. Das Zeichen &#8222;D&#8220; ist durch die Zahl 44 kodiert, das Zeichen &#8222;a&#8220; durch &#8222;61&#8220; (jeweils im Hexadezimalsystem). Pro Zeichen ein Byte. Der Editor ist so nett, rechts daneben gleich die g\u00e4ngige Entsprechung der Byte-Zahl anzuzeigen, so dass man nicht nur die tats\u00e4chlich gespeicherten Bytes sieht, sondern auch einen Hinweis darauf, wof\u00fcr sie vermutlich stehen.<br>Die untere Datei ist in Unicode-16 gespeichert. Da sind f\u00fcr jedes Zeichen 2 Byte (16 bit) reserviert. Das Zeichen &#8222;D&#8220; bzw. der Unicode-Codepoint U+0044 ist durch die zwei Zahlen &#8222;44&#8220; und &#8222;00&#8220; repr\u00e4sentiert. Warum zwei Bytes\/Zahlen? Weil das bei UTF-16 immer so ist. Aber welche Zahl kommt zuerst, die 44 oder die 00? Im Prinzip geht beides, und es gibt auch beide Varianten &#8211; die eine hei\u00dft <em>big-endian<\/em> und die andere <em>little-endian<\/em>. Um sicher zu gehen, dass man wei\u00df, welche Version benutzt wird, steht gerne mal am Anfang einer UTF-16-Datei &#8222;FFFE&#8220; beziehunsgweise eben &#8222;FEFF&#8220;. Und ja, <em>big-endian<\/em> und <em>little-endian<\/em> <a href=\"https:\/\/secure.wikimedia.org\/wikipedia\/en\/wiki\/Endianness#Etymology\">stammen aus<\/a> Jonathan Swifts <em>Gulliver&#8217;s Travels<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(In UTF-8 w\u00e4re das &#8222;D&#8220; nur durch die Ein-Byte-Zahl 44 kodiert, das &#8222;\u00dc&#8220; dagegen durch die zwei Bytes c3 und 9d. Und die obere Datei braucht nur halb so viel Speicherplatz wie die untere.)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>(7 Kommentare.) (Theoretischen Teil \u00fcberspringen und gleich zur L\u00f6sung der Aufgabe springen, die im Titel angek\u00fcndigt wird. Aber das ist nur f\u00fcr technische Blogbastler interessant.) Inzwischen ist aus einem kurzen Eintrag ein langer geworden, und er erkl\u00e4rt nicht mehr das, was er am Anfang sollte. Ich sollte ihn wirklich k\u00fcrzen und neu strukturieren. Der Unterschied [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":3399,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[25],"tags":[227],"class_list":["post-3377","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatik","tag-informatik"],"jetpack_featured_media_url":"https:\/\/www.herr-rau.de\/wordpress\/archiv\/iso_uni_hex.png","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/3377","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/comments?post=3377"}],"version-history":[{"count":4,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/3377\/revisions"}],"predecessor-version":[{"id":56378,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/3377\/revisions\/56378"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media\/3399"}],"wp:attachment":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media?parent=3377"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/categories?post=3377"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/tags?post=3377"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}