Encoding, Zeichenwert rauskriegen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

Du hast da einen `UnicodeEncodeError`, zu dem Zeitpunkt ist der Webseiteninhalt also anscheinend schon erfolgreich dekodiert worden.

Die Frage ist also wobei Du diesen Fehler bekommst.
Bong-Jour
User
Beiträge: 54
Registriert: Donnerstag 24. Juli 2008, 13:14
Kontaktdaten:

Kann es sein, dass read() noch 3 Zeichen vor den eigentlichen Text stellt.. ? Ohne es jetzt ausgiebig getestet zu haben und das ich es gleich revidiere: Daten[3:] scheint sich problemlos encodieren zu lassen und es fehlt auch nichts vom Text

Daten = urllib2.urlopen(urllib2.Request(Url, Parameter, Header)).read(); return Daten
Das ist kein Hakenkreuz - Das ist das neue Python-Symbol!
BlackJack

Nein das kann nicht sein. `read()` liest nur das was der Webserver auch sendet.

Wobei ich mich hier wieder frage was Du *en*kodierst? `Daten` sind *Bytes* die kann man, zumindest was Unicode angeht, nur sinnvoll *de*kodieren.

Ich glaube Du solltest Dich wirklich mal mit dem Thema Unicode und Kodierungen beschäftigen und aufhören einfach nur wild herum zu probieren.
Bong-Jour
User
Beiträge: 54
Registriert: Donnerstag 24. Juli 2008, 13:14
Kontaktdaten:

BlackJack hat geschrieben:Wobei ich mich hier wieder frage was Du *en*kodierst? `Daten` sind *Bytes* die kann man, zumindest was Unicode angeht, nur sinnvoll *de*kodieren.

Stimmt, sagt ja schon die Fehlermeldung: `UnicodeDecodeError` :D
Das ist kein Hakenkreuz - Das ist das neue Python-Symbol!
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

hab auch mal eine Funktion erstellt die ganze Sätze umwandelt.
Ist zwar sinlos, aber egal:

Code: Alles auswählen

def str2char(string):
        end=""
        for element in string:
                end=end+"/"+hex(ord(element))
        return end
und ein beispiel:

Code: Alles auswählen

>>> str2char("ein Satz mit Umlauten und Zeichen: öäü°!\"§$%&/()=")
'/0x65/0x69/0x6e/0x20/0x53/0x61/0x74/0x7a/0x20/0x6d/0x69/0x74/0x20/0x55/0x6d/0x6c/0x61/0x75/0x74/0x65/0x6e/0x20/0x75/0x6e/0x64/0x20/0x5a/0x65/0x69/0x63/0x68/0x65/0x6e/0x3a/0x20/0xf6/0xe4/0xfc/0xb0/0x21/0x22/0xa7/0x24/0x25/0x26/0x2f/0x28/0x29/0x3d'
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Bong-Jour hat geschrieben:Kann es sein, dass read() noch 3 Zeichen vor den eigentlichen Text stellt.. ?
Nein, aber dein Editor, mit dem du die Seite erzeugt hast, die der Webserver ausliefert, hat da einen BOM geschrieben. Das Ding wird eigentlich nur benötigt, um UTF-16LE und UTF-16BE bzw. UTF-32LE und UTF-32BE zu unterscheiden, manchmal kann man es aber auch benutzen, um UTF-8 überhaupt zu erkennen, denn U+FEFF ist kein sichtbares Zeichen.

Das gehört da aber IMHO nicht hin. Der Webserver sollte das Encoding im HTTP-Header definieren.

Stefan
Bong-Jour
User
Beiträge: 54
Registriert: Donnerstag 24. Juli 2008, 13:14
Kontaktdaten:

Ich bedanke mich für den Tipp mit dem BOM



(Leute mit einenr minimalen Immunität gegen Aluminium leiden wohl eher unter einer minimalen Aluminiumimmunität. Du kannst doch nicht das Adjektiv da rein "ballern" ^^)
Das ist kein Hakenkreuz - Das ist das neue Python-Symbol!
Antworten