Seite 1 von 1

encode Problem

Verfasst: Samstag 16. Februar 2008, 18:36
von Frank aka Ch3ck3r
Hi leute.

Ich habe mir ein Programm geschrieben das auf das Backend von Teamspeak Servern zugreift. Dort liest es dann die Playerlist aus und durchsucht sie mit find().

Da es in Teamspeak möglich ist, beim Namen Sonderzeichen anzugeben, habe ich nun das Proble, dass ich folgende Meldung bekomme:
if uplist.find(player.upper()) != -1:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xbf in position 242: ordinal not in range(128)
Ich habe bereits versucht mit encode und decode zu arbeiten. Leider weiß ich jedoch nicht wie die Ausgangsdaten codiert sind (ich bekomme sie über socket.recv())

Verfasst: Samstag 16. Februar 2008, 19:15
von BlackJack
``if player.upper() in uplist:`` ist IMHO etwas eleganter als `find()`.

Du musst Dir anschauen was für Typen Du da hast. Das sieht so aus, als wenn entweder `player` eine Unicode-Zeichenkette ist und `uplist` Byte-Zeichenketten enthält, oder umgekehrt.

Was kommt den bei ``print repr(player)`` und ``print uplist`` heraus, wenn Du das vor der problematischen Zeile einfügst?

Verfasst: Samstag 16. Februar 2008, 20:04
von Frank aka Ch3ck3r
player ist unicode, die uplist nicht.

uplist (ausschnitt)
'P_ID\tC_ID\tPS\tBS\tPR\tBR\tPL\tPING\tLOGIN
TIME\tIDLETIME\tCPRIVS\tPPRIVS\tPFLAGS\tIP\tNICK\tLOG
INNAME\r\n1\t1\t16407\t1302624\t3125\t477216\t277\t61\t10
505\t85\t1\t5\t0\t"0.0.0.0"\t"GEVATTER PIET"\t"GEVATTER PIET"\t\r\n3\t1\t9881\t461193\t4590\t704708\t15\t9
8\t8835\t556\t0\t5\t0\t"0.0.0.0"\t"RAZOR"\t"RAZOR89"\t\r\nOK\r\n'
reicht es, die uplist in unicode umzuwandeln?

//EDIT

Danke, hab es jetzt geschafft mit unicode(uplist,"iso8859-1")