ich habe ein kleines Problem: Ich generiere mit Python eine Webseite und gebe sie mit print() aus. Zum einen werden Umlaute nicht richtig dargestellt und zum anderen verschwinden Backslashes, so dass der Javascript-Code fehlerhaft wird. In der Quelltext-Datei steht alles richtig, nur wenn man im Quelltext des Browsern schaut, ist es eben falsch. Irgendwo geht bei der Übergabe zum Browser das Utf-8 verloren.
Hier etwas Quelltext (ist aus einem Beispielprojekt aus dem Netz für ein Kontextmenü (Javascript)):
Code: Alles auswählen
response += """
<script>
...
output += '<tr><td onclick="cmenu = false;">Immer normales Kontextmenü<\/td><\/tr>';
output += '<tr><td onclick="setTimeout(function () {cmenu = null;}, 1);">Einmal normales Kontextmenü<\/td><\/tr>';
output += '<tr><td onclick="transparent(\''+element.id+'\', \'-\');">Transparenter<\/td><\/tr>';
if (get_opacity(element) < 1) {
output += '<tr><td onclick="transparent(\''+element.id+'\', \'+\');">Weniger Transparent<\/td><\/tr>';
}
...
</script>"""
Code: Alles auswählen
output += '<tr><td onclick="cmenu = false;">Immer normales Kontextmen�<\/td><\/tr>';
output += '<tr><td onclick="setTimeout(function () {cmenu = null;}, 1);">Einmal normales Kontextmen�<\/td><\/tr>';
output += '<tr><td onclick="transparent(''+element.id+'', '-');">Transparenter<\/td><\/tr>';
if (get_opacity(element) < 1) {
output += '<tr><td onclick="transparent(''+element.id+'', '+');">Weniger Transparent<\/td><\/tr>';
}
Code: Alles auswählen
="transparent(\\''+element.id+'\\', \\'+\\');">W
Sämtliche im Netz aufgeschnappten Versuche der Utf-8 Konvertierung schlugen fehl (es darf zu Eurer Erheiterung dienen - seht es mir nach, bin Python-Anfänger):
Code: Alles auswählen
print (response)
#print(repr(response))
#print(response % vars())
#print(response).encode('utf-8')
#response = unicode(response, 'UTF-8')
#print(response).decode('raw-unicode-escape').encode('utf-8')
#print(response.encode('utf-8'))
#print(response.encode('UTF-8'))
Habe das noch gefunden:
Leider weiß ich dadurch nicht, was ich wo umstellen muss, Ihr vielleicht?Die häufigsten Fehler sind als ISO-8859-1, -15 oder Windows-1252 deklarierte Daten, die aber tatsächlich UTF-8-kodiert wurden oder umgekehrt. Dies äußert sich dann darin, dass beispielsweise aus einem ä die Zeichenfolge À wird – das Zeichen ä wird in UTF-8 in zwei Bytes kodiert, was in Ein-Byte-Codierungen zwei Zeichen entspricht. Tritt hingegen das Zeichen � auf, werden Daten in einer Ein-Byte-Codierung (ISO-8859-X, Windows-1252) als UTF-8 deklariert und interpretiert – nicht alle Byte-Kombinationen aus Ein-Einbyte-Codierungen sind gültiges UTF-8 und das wird durch das spezielle Zeichen � kenntlich gemacht.
In beiden Fällen muss nach der abweichenden Zeichencodierungs-Deklaration (s. o.) im System gesucht werden und an die tatsächliche angepasst werden – wobei ein Umstieg auf UTF-8 bevorzugt werden sollte.
Viele Grüße,
dd0815
Python: 3.7
Webserver: Apache (Xampp)