Andreas Sperber: Umlaute Javascript -> JSON -> Servlet -> MySQL und zurück

Hallo,

ich habe folgende Situation.
Eine Web-Anwendung, die per AJAX + JSON, einem Servlet Daten zuschickt, welches diese in einer Datenbank ablegt. (mySQL 5 Zeichensatz latin1-general)

Ohne Umlaute läuft alles super. Soblad ich aber in der Anwedung Umlaute verwende, werden daraus komische Zeichen (z.B. öö).
Ich habe jetzt versucht die Umlaute vorher in UTF-8 zu konviertieren, (also "ä" zu "Ä") allerdings packt das JSON nicht, weil da ja bei jedem Umlaut ein ";"  drin steht.

Allerdings umgekehrt, wenn ich in der Datenbank manuell einen Umlaut eintrage, dann wird der auch richtig durch gereicht. Das verstehe ich nicht, müsste ja in die andere Richtig genauso klappen.

Weiß jemand wie ich die Umlaute sauber durchschleußen kann?

Viele Grüße,
Andreas

  1. echo $begrüßung;

    Eine Web-Anwendung, die per AJAX + JSON, einem Servlet Daten zuschickt, welches diese in einer Datenbank ablegt. (mySQL 5 Zeichensatz latin1-general)

    Ohne Umlaute läuft alles super. Soblad ich aber in der Anwedung Umlaute verwende, werden daraus komische Zeichen (z.B. öö).

    Das sieht nach einer UTF-8-Kodierung aus.

    Ich habe jetzt versucht die Umlaute vorher in UTF-8 zu konviertieren, (also "ä" zu "Ä")

    Das ist keine UTF-8-kodierung sondern HTML-Entities.

    Allerdings umgekehrt, wenn ich in der Datenbank manuell einen Umlaut eintrage, dann wird der auch richtig durch gereicht. Das verstehe ich nicht, müsste ja in die andere Richtig genauso klappen.

    Ist es wirklich der gleiche Weg - DB->Servlet->AJAX/JSON->Webseite - oder hast du beim Testen vielleicht den AJAX-Teil ausgelassen? Die Default-Kodierung von AJAX ist UTF-8. Vielleicht hast du beim Empfang eine Umwandlung ISO-8859-1 nach UTF-8 drin, so dass du nun eine doppelte Kodierung hast?

    Weiß jemand wie ich die Umlaute sauber durchschleußen kann?

    Wenn du "durchschleusen" richtigerweise mit s schreibst, hast du auch kein Problem, aber Spaß beiseite. Wichtig bei der Kommunikation zwischen Datenbank-Server und Client (dein Servlet) ist eine abgestimmte Zeichenkodierung. Wenn zufälligerweise die Server-Default-Einstellung und die vom Client verwendete Kodierung übereinstimmen hast du kein Problem. Darauf würde ich mich aber nicht verlassen, sondern die zu verwendende Kodierung mit dem Statement SET NAMES utf8 oder latin1 explizit festlegen.

    Eine Ferndiagnose bei komplexen Systemen ist leider recht schwierig ...

    echo "$verabschiedung $name";