Andreas-Lindig: mySQL-Fulltext mit base-64 überlisten - gute Idee?

Beitrag lesen

Hallo Sven,

Die Frage ist: Was kann dein Editor darstellen? Versteht der UTF-8, oder nur ISO-8859-1?

Gut, ich verwende mySQL-Front. Kann scheinbar nur ISO-8859-1. Aber wofür brauche ich dann den Zeichensatz der DB? Es steht immer, der default-Zeichensatz von  mySQL wäre ISO-8859-1. Wenn in dem Datensatz die utf-8-zwei-Byte-Folge für das ü (11000011 10111100) zum Beipiel abgespeichert ist, statt des ISO-8859-1-ein-Byte-Zeichens für ü (11111100) habe ich da doch eine neutrale Information, die erst später in meinem Programm in ein bestimmtes Zeichen umgewandelt wird.

Es ist also grundsätzlich möglich, dass du folgendes abspeicherst:
"Ein ISO-8859-1-String mit den Bytewerten 196, 230 und 164"
Das steht für die drei Zeichen "Äæ¤" (A-Umlaut, ae-Ligatur und Currency-Symbol).

Weiterhin kannst du auch abspeichern:
"Ein ISO-8859-5-String mit den Bytewerten 196, 230 und 164"
Das steht dann für die drei Zeichen F, z und E (wenn ich das man frei übersetze, was mir http://de.selfhtml.org/inter/zeichensaetze.htm so verrät.

das hieße also, ich müßte für jeden Datensatz den zugehörigen Zeichensatz mit abspeichern? Wenn ich das mache, brauche ich doch im Prinzip kein utf-8 mehr. Dein Beispiel oben wären in utf-8 ja auch gar nicht mehr 3 Zeichen, sondern anderthalb oder so. Also, wenn ich richtig verstehe: entweder ich speichere in utf-8 und nur meine Ausgabeprogramme müssen das wissen und ich habe (fast) alle Zeichen zur Verfügung. Oder ich speichere in einem herkömmlichen Zeichensatz und muß das in jedem Datensatz - oder vielleicht für die ganze Tabelle gültig - dazuschreiben. Und für den Gültigkeitsbereich des angegebenen Zeichensatzes habe ich eben auch nur die jeweiligen Zeichen zur Verfügung. Meinem Ausgabeprogramm muß ich den Zeichensatz dann immer jeweils mitteilen.

Ich hoffe, du erkennst das Problem: Ohne die Angabe "Ein ISO-irgendwas-String" sind die Bytewerte vollkommen wertlos, weil diese ja in allen ISO-8859-X-Definitionen mit irgendeinem sinnvollen Zeichen belegt sind. Man kriegt nur dann raus, welches der vielen Zeichen tatsächlich gemeint ist, wenn man die Zeichentabelle kennt, auf der die Codierung basiert.

Also: Es geht bei meinem Projekt ja um ein Internet-Forum. Von der DB bekomme ich den utf-8 Wert für ein Zeichen. In der Webseite steht die Codierung "charset=utf-8". Der Brauser zeigt an und verschickt (Formular) also in utf-8. Er zeigt bisher alles richtig an, wenn ich z.B. ISO-8859-1 angebe, zeigt er mir eben diese ä-Folgen für Umlaute. Wenn jetzt einer in Kyrillien das besagte k mit Haken (in ISO-8859-5 der gleiche Wert, wie in 8895-1 das ü) in das Formular tippt, dann wird je nach Betriebssystemeinstellung das k oder das ü im Forumlar-Eingabefeld angezeigt - und abegeschickt? Oder anders gefragt: kann ich davon ausgehen, daß das, was der User in seinem Formular sieht, auch als korrekter utf-8 Wert übermittelt wird, also für ein k mit Haken ein anderer Wert als für ü?

Aber auch wenn man UTF-8 verwendet, muß man das angeben. Denn es könnte ja irgendeinen Irren geben, der keinen deutschen Umlaut meinte, sondern tatsächlich "ä" schrieb.

Ja, verstanden. Die Angabe habe ich aber in meinem Programm, wenn ich die Seiten entsprechend codiere, oder?

Die Tastatur schickt an den Rechner Scancodes. Diese werden mit Sicherheit durch diverse Treiber und Codetabellen geschickt, um am Ende ein (bei unicodefähigen Betriebssystemen) eindeutiges Unicode-Zeichen zu produzieren, welches der Applikation übergeben wird, die auf den Tastendruck wartet.

aha, also: bei unicodefähigen Betriebssystemen kann ich davon ausgehen, daß der richtige Wert an meine Anwendung weitergereicht wird. Die Anwendung (hier der Brauser) muß jetzt nur noch den Zeichensatz interpretieren können.

Du kannst ja schließlich unter Windows (würde mich wundern, wenn Linux da versagt) mehrere Tastaturtabellen gleichzeitig installieren und mit Mausklick (oder Tastenkombi)umschalten. Dann hast du eine russische Tastaturbelegung

Das würde mich ja mal intressieren. Wie geht das?

Einunddieselbe Taste sendet dann immer noch denselben Scancode, aber der wird vom Betriebssystem in ein vollkommen anderes Unicode-Zeichen gewandelt.

solangsam geht mir was auf: Das Betriebssystem macht aus einer Taste ein eindeutiges Zeichen? Ein Osteuropäer hat eine betimmte Einstellung - "Windows-ost" oder so -, die ihm das auf den Bildschirm zaubert, bzw. an die Anwendung schickt, was auf seiner Tastatur steht?
Hat damit auch zu tun, daß, wenn ich meinen Rechner im Bios (oder wie das heißt) starte, die X- und Y-Taste vertauscht sind?

Gruß, Andreas

--
<img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
hier könnte auch ruhig mal'n neues Bild stehen.
Gruß, Andreas
--
<img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
hier könnte auch ruhig mal'n neues Bild stehen.