Ja, stimmt =/
Code: Alles auswählen
Traceback (most recent call last):
File "./scales.py", line 75, in sendMessage
self.client.send(str(self.lineEdt.text()))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
Tja, das ist ein Problem... was kann ich dagegen tun?
Hier ein wenig mehr Code...
Client (Qt-GUI), verschickt einen String aus einem QLineEdit.
self.client ist das socket der GUI.
Code: Alles auswählen
def sendMessage(self):
self.client.send(str(self.lineEdt.text()))
print "Sent:", repr(str(self.lineEdt.text()))
self.lineEdt.clear()
Client-Thread (lauscht im Hintergrund, ob etwas empfangen wurde und schreibt empfangene Daten ins QTextEdit):
Code: Alles auswählen
class ChatclientThread(Thread):
def __init__(self, gui, socket):
Thread.__init__(self)
self.gui = gui
self.socket = socket
def run(self):
while True:
message = self.socket.recv(1024)
print "Recv:", repr(message)
self.gui.messageField.append(message)
Server-Thread: Der String wird an alle Clients geschickt.
Code: Alles auswählen
class ConnThread(Thread):
def __init__(self, connection):
Thread.__init__(self)
self.connection = connection
def run(self):
self.handler()
def handler(self):
while True:
data = self.connection.recv(1024)
if not data:
break
print "Recv:", repr(data)
# Send to all clients
for i in Server.allClients:
i.send(str(data))
Soweit funktioniert das Ganze nun. Tippe ich einen String in den Client (QLineEdit) und schicke diesen ab, erhalte ich denselben String zurück. Leider klappt das wie lunar angesprochen hat nicht mit Umlauten.
Experimente mit decode('utf-8') schlugen fehl. Ich komme ehrlich gesagt nicht weiter.
Muss ich den String vorher von Hand in Bytes umwandeln und daraus nach Empfangen wieder einen String basteln?
Vielen Dank soweit schonmal!