Seite 1 von 1

Listeintrag verändert Coding !?

Verfasst: Donnerstag 24. Januar 2008, 21:07
von snakeseven
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

Verfasst: Donnerstag 24. Januar 2008, 21:15
von BlackJack
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.

Verfasst: Freitag 25. Januar 2008, 07:00
von snakeseven
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

Verfasst: Freitag 25. Januar 2008, 10:46
von BlackJack
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.

Verfasst: Freitag 25. Januar 2008, 11:19
von snakeseven
Das macht Sinn :)

Thanx! Seven