probleme mit codierung

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

ich schreib gerade eine web app

generell speichere ich daten in meiner mysql db so, wie der benutzer sie eingegeben hat
beim ausgeben werden sie dan cgi.escaped

das klappt bei zeichen wie zb `<>@#&*()` aber bei `ue`[1], `"` und andere, wird statdessen nur sowas wie `ür` (fuer ue) oder ´ (fuer sz) ausgegebn :cry:

wasn jetzt los?
ist cgi.escape schlampig, oder kommt `MySQLdb` nicht mit der datenbank codierung (UTF-8 ?) klar...


[1]ich meine das VER... ...spielte `u` mit dem zwei punkten oben..... :lol:

ps:
wenn ich per mysql-client die besondere zeichen ausgeben lasse, wird alles richtig anngezeigt, also gespechert wird alles korrekt


danke

EDIT:
und warum escaped cgi.escape eigentlich nicht / ( )+/ zu / (&nbsp)+/ ?


NCHMAL EDIT:
ohh man, dieser beitrag wurde ziemlich kryptisch, ich hoffe ihr koents verstehen
cp != mv
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Costi hat geschrieben:wasn jetzt los?
ist cgi.escape schlampig, oder kommt `MySQLdb` nicht mit der datenbank codierung (UTF-8 ?) klar...
Das Encoding in dem der Text ausgegeben wird, stimmt nicht mit dem Encoding überein, welches der Browser verwendet. Stelle überal UTF-8 ein, dann funktioniert es auch.
Umlaute haben mit HTML-Escapen gar nichts zu tun, sie sind ja für HTML keine speziellen Zeichen. Das einzige was an ihnen besonders ist, ist dass sie HTML-Entities definiert haben.
Costi hat geschrieben:EDIT:
und warum escaped cgi.escape eigentlich nicht / ( )+/ zu / (&nbsp)+/ ?
Erstens weil es ja nur HTML-Sonderzeichen escapen muss und zweitens: warum sollte es Space mit Non-Breaking Space escapen? Ersetze mal in einer Seite alle Spaces mit Non-Breaking Spaces und guck was passiert. Das ist nicht das selbe, so wie etwa ``ä`` und ``&auml;``.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

juhu, jetzt klapts

Erstens weil es ja nur HTML-Sonderzeichen escapen muss und zweitens: warum sollte es Space mit Non-Breaking Space escapen? Ersetze mal in einer Seite alle Spaces mit Non-Breaking Spaces und guck was passiert. Das ist nicht das selbe, so wie etwa ``ä`` und ``&auml;``.
ich weis nicht ob cgi.escape fuer andere zwecke gemacht wurde.
aber wenn es darum geht text im browser "richtig" formatiert anzuzeigen ist es sicher besser mehr als zwei leerzeichen mit `&nbsp;` zu ersetzen.
weil diese mehrere leerzeichen sonst als nur eines angezeigt werden
cp != mv
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Costi hat geschrieben:ich weis nicht ob cgi.escape fuer andere zwecke gemacht wurde.
aber wenn es darum geht text im browser "richtig" formatiert anzuzeigen ist es sicher besser mehr als zwei leerzeichen mit `&nbsp;` zu ersetzen.
weil diese mehrere leerzeichen sonst als nur eines angezeigt werden
Nein, wieso sollte es besser sein, zwei Leerzeichen mit Non-Breaking Spaces zu ersetzen? Das ist so als würde man sagen: wenn man mehr als zwei 'ö' hat, sollte man sie mit einem 'ä' ersetzen.

Nochmal: Ein Leerzeichen ist nicht gleich einem Non-Breaking Space. Zwei Leerzeichen sind also auch nicht zwei Non-Breaking Spaces. Wenn jemand zwei Leerzeichen im Output haben will, dann soll er da Non-Breaking Spaces nutzen, wenn man es ihm nicht ausreden kann. Das heißt aber nicht, dass man nun Leerzeichen mit Non-Breaking Spaces ersetzen soll, weil die Renderer jetzt Bugs hätten, mehr als ein Leerzeichen anzuzeigen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Costi hat geschrieben:oder kommt `MySQLdb` nicht mit der datenbank codierung (UTF-8 ?) klar...
Schau dir mal das an: [wiki]MySQLdb troubleshooting[/wiki]

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Leonidas hat geschrieben:Nochmal: Ein Leerzeichen ist nicht gleich einem Non-Breaking Space. Zwei Leerzeichen sind also auch nicht zwei Non-Breaking Spaces. Wenn jemand zwei Leerzeichen im Output haben will, dann soll er da Non-Breaking Spaces nutzen, wenn man es ihm nicht ausreden kann. Das heißt aber nicht, dass man nun Leerzeichen mit Non-Breaking Spaces ersetzen soll, weil die Renderer jetzt Bugs hätten, mehr als ein Leerzeichen anzuzeigen.
Non-Breaking-Spaces sind ein Hack. Der bessere Weg ist es "white-space: pre" zu setzen oder xml:space="preserve" wenn man XHTML nutzt.

Was das Thema Encoding angeht: MySQL Tabellencharset auf utf8 stellen und eine dazupassende Collation wählen. Dann noch charset="utf8" beim Verbindungsaufba als Parameter übergeben.
TUFKAB – the user formerly known as blackbird
Antworten