Moin!
Problem: Du nimmst hierbei explizit eine Codierung an (meistens wohl ISO-8859-1 oder -15).
also, ich speichere im Moment in utf-8 ab. Der Datensatz der DB ist aber ISO-8859-1, wenn ich das richtig sehe. Also meine Umlaute stehen da jetzt in zwei bis drei Zeichen codiert...
Die Frage ist: Was kann dein Editor darstellen? Versteht der UTF-8, oder nur ISO-8859-1? Die meisten Freeware-Editoren verstehen leider kein UTF-8 (und auch sonst kein Unicode), weshalb dir anstelle deutscher Umlaute immer ein großes A-Tilde zusammen mit einem weiteren Zeichen angezeigt wird. Andere Zeichen aus fremden Sprachen werden wohlmöglich sogar drei oder vier seltsame Zeichen je Buchstabe auswerfen.
In der Regel stört das nicht, aber wenn das Projekt zu sehr wächst und mal nach Osteuropa muß, hast Du erstmal verloren.
...müßte es bei utf-8 nicht auch mit den Ossis klappen?
UTF-8 ist, da es den gesamten Unicode-Zeichensatz adressieren kann, die Lösung für alle möglichen Zeichenprobleme auf der ganzen Welt. Mehrsprachliche Projekte ohne verpflichtende UTF-8-Codierung zu beginnen, würde ich als grob fahrlässig bezeichnen. In der Theorie ist man mit UTF-8 alle Probleme los. Leider ist da noch die Praxis... :)
Ich habe noch nicht ganz verstanden, welches Problem Du meinst. Bleistift: Ich speichere ü als _FC. In Kyrillisch ist das so'n k mit Haken drauf. Wenn das Projekt aber in Kyrillien benutzt wird, dann würde doch von vornherein die Maskierungsfunktion auf die entsprechenden Zeichen umgestellt. Also schon beim reinschreiben nicht "ersetze ü durch _FC", sondern "ersetze k mit Haken drauf durch _FC".
Diese Vorgänge passieren, wenn du beispielsweise mit ISO-8859-1 (Westeuropa) und ISO-8859-5 (kyrillische Zeichen) arbeitest. Diese Zeichensätze haben neben den bekannten und identischen ASCII-Zeichen (Bytewert von 0 bis 127) unterschiedliche Zeichen für dieselben Bytewerte von 160 bis 255 definiert.
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.
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.
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. Das Auftreten von A-Tilde ist kein markantes Kennzeichen von UTF-8, es ist nur ein möglicher Indikator für menschliche Intelligenz - die fehlt dem Computer bekanntlich vollkommen.
Btw., weil ich mich im Moment soviel mit diesen Zeichensatzgeschichten beschäftige: wenn ich hier auf deutschem Grund und Boden in meine Tastatur ein ü hacke, schickt die Tastatur dann an meinen Rechner ein ü oder eine 252? Und wenn sie eine 252 schickt, schickt dann nicht die Tastatur des Kyrilliers, wenn er auf dieses k mit Haken haut, auch eine 252 ab? Wenn es mir also gelingt immer die Zahl zu speichern, die wirklich abgeschickt wurde, bin ich dann nicht aus dem Schneider?
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. 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, dir fehlen dann leider die passenden Tastenbeschriftungen. Aber russisch tippen kann man damit trotzdem (wobei man zum Russisch-Tippen wohl die osteuropäischen Tastaturlayouts installiert haben muß - nur falls du es direkt ausprobieren willst). Einunddieselbe Taste sendet dann immer noch denselben Scancode, aber der wird vom Betriebssystem in ein vollkommen anderes Unicode-Zeichen gewandelt.
- Sven Rautenberg