Listeintrag verändert Coding !?

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.
Antworten
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Donnerstag 24. Januar 2008, 21:07

Hallo,
jetzt verstehe ich mal wieder was überhaupt nicht. Ich lese einen Namen aus einer mit utf-8 codierten Seite heraus. Ich wandle die Zeichen um in iso-8859-1 und trage den umcodierten Namen in eine Liste ein. Vor dem Eintrag ist alles so, wie es sein soll.

Code: Alles auswählen

(print name:) TRENTEMØLLER
Nach dem Eintrag in die Liste aber, sieht der Name so aus:

Code: Alles auswählen

(print liste:) ['TRENTEM\xd8LLER']
Das verstehe ich jetzt leider nicht ??

Hier der Code:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import urllib2

def change_coding(ttl):
    try: unicode = ttl.decode("utf-8")
    except: iso = ttl
    try:  iso = unicode.encode("iso-8859-1")
    except: iso = ttl
    return iso
      
liste = []
source = urllib2.urlopen("http://profile.myspace.com/index.cfm?fuseaction=user.viewprofile&friendID=80919512").read()

pos1 = source.find('"nametext"',14000)
pos2 = source.find('</span><br>',pos1)
name = change_coding(source[pos1+11:pos2].strip())
print name
liste.append(name)
print liste
Gruß, Seven
BlackJack

Donnerstag 24. Januar 2008, 21:15

In Listen werden Elemente mit `repr()` in Zeichenketten umgewandelt und nicht mit `str()`, damit sieht was da *wirklich* drin ist. An der Zeichenkette selber ändert sich nichts.
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Freitag 25. Januar 2008, 07:00

OK, das ist schon mal sehr nützlich. Ich habe aber immer noch das Problem, dass ich 'name' nicht mit einem String zusammenfügen kann.
Lasse ich mir 'name' und String einzeln ausgeben, ist alles ok.

Code: Alles auswählen

print name > TRENTEMØLLER
print details > %80919512%trentemoeller%13%Copenhagen,Vesterbro%Indie
Beim Zusammenfügen tritt der Fehler auf. Position 7 ist die Position des dänischen 'Ø':

Code: Alles auswählen

print name+details > UnicodeDecodeError: 'ascii' codec can't decode byte 0xd8 in position 7: ordinal not in range(128)
Gruß, Seven
BlackJack

Freitag 25. Januar 2008, 10:46

Wenn ich mal raten müsste versuchst Du eine Zeichenkette und ein Unicode-Objekt mit + zu verbinden und die Zeichenkette enthält Bytes ausserhalb von ASCII. Wenn Du mit Unicode arbeitest, dann am besten *nur* mit Unicode. Das heisst wenn die Daten das Programm betreten wandelt man sie in Unicode und erst wenn sie es als Bytes wieder verlassen müssen kodiert man wieder.
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Freitag 25. Januar 2008, 11:19

Das macht Sinn :)

Thanx! Seven
Antworten