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

Listeintrag verändert Coding !?

Beitragvon snakeseven » 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=](print name:) TRENTEMØLLER[/code]

Nach dem Eintrag in die Liste aber, sieht der Name so aus:

[code=](print liste:) ['TRENTEM\xd8LLER'][/code]

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

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

Beitragvon snakeseven » 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=]print name > TRENTEMØLLER
print details > %80919512%trentemoeller%13%Copenhagen,Vesterbro%Indie[/code]

Beim Zusammenfügen tritt der Fehler auf. Position 7 ist die Position des dänischen 'Ø':

[code=]print name+details > UnicodeDecodeError: 'ascii' codec can't decode byte 0xd8 in position 7: ordinal not in range(128)[/code]

Gruß, Seven
BlackJack

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

Beitragvon snakeseven » Freitag 25. Januar 2008, 11:19

Das macht Sinn :)

Thanx! Seven

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder