Hi,

I am havin an encoding problem. If you have read my earlier post, I was
doing a simple chat application. Here is how it goes.

===
Client Class
===
    def on_lineEdit_returnPressed(self):
        text= self.ui.lineEdit.text()
        self.ui.lineEdit.selectAll()
        self.ui.lineEdit.cut()
        self.ui.textEdit.paste()
        self.netconnector.sendMessage(text)

===
netconnector
===

    def sendMessage(self,msg):
        if self.isConnected:
            self.socket.send(msg.toUtf8().trimmed())
===
Server Side:
===

===
Server Class
===
self.connect(self.netconnector,QtCore.SIGNAL("dataRecieved(QString)"),self.messageRecieved)

===
server side netconnector:
===

    def messageRecieved(self,data):
        self.ui.textEdit.append(data)

What happens is that, when I type non-ascii characters into client side line
edit, it becomes distorted at server side, like

şğü -- > şğü

Any idea how to fix this?

You can find whole code as attachment.
#!/usr/bin/python
# -*- coding: utf-8 -*-

# chat_server

import sys
from PyQt4 import QtCore,QtGui
from chat_ui import Ui_MainWindow
import socket

class Client(QtGui.QMainWindow):
    
    def __init__(self,parent=None):
        super(Client,self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        
        self.ui.textEdit.append("Trying to connect to server")
        self.netconnector = NetConnectWorker(self)
        self.netconnector.attemptConnect()

        self.connect(self.netconnector,QtCore.SIGNAL("Connected()"),self.connected)
#        self.connect(self.netconnector,QtCore.SIGNAL("dataRecieved(QString)"),self.messageRecieved)
        self.connect(self.netconnector,QtCore.SIGNAL("socketError()"),self.socketError)
        self.ui.lineEdit
    def on_lineEdit_returnPressed(self):
        text= self.ui.lineEdit.text()
        self.ui.lineEdit.selectAll()
        self.ui.lineEdit.cut()
        self.ui.textEdit.paste()
        self.netconnector.sendMessage(text)
    
    def connected(self):
        self.ui.textEdit.append("Connected")
        
#    def messageRecieved(self,data):
#        self.ui.textEdit.append(data)
#        
    def socketError(self):
        self.ui.textEdit.append("Couldn't connect lol :S")
    

class NetConnectWorker(QtCore.QThread):
    
    def __init__(self,parent=None):
        super(NetConnectWorker,self).__init__(parent)
        self.exiting = False
        self.socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.host = 'localhost'
        self.port = 50000
        self.size = 5
        self.isConnected=False
    
    def __del__(self):
        self.exiting = True
        self.wait()
            
    def attemptConnect(self):
        self.start()
    
    def sendMessage(self,msg):
        if self.isConnected:
            self.socket.send(msg.toUtf8().trimmed())
    
    def run(self):
        try:
            self.socket.connect((self.host,self.port))
            self.isConnected = True
        except socket.error:
            self.emit(QtCore.SIGNAL("socketError()"))
            return
        
        
        self.emit(QtCore.SIGNAL("Connected()"))
        
            
        
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    sv=Client()
    sv.show()
    sys.exit(app.exec_())
#!/usr/bin/python
# -*- coding: utf-8 -*-

# chat_server

import sys
from PyQt4 import QtCore,QtGui
from chat_ui import Ui_MainWindow
import socket

class Server(QtGui.QMainWindow):
    
    def __init__(self,parent=None):
        super(Server,self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        
        self.ui.textEdit.append("Waiting for inbound connections")
        self.netconnector = NetConnectWorker(self)
        self.netconnector.attemptConnect()
        
        self.connect(self.netconnector,QtCore.SIGNAL("Connected()"),self.connected)
        self.connect(self.netconnector,QtCore.SIGNAL("dataRecieved(QString)"),self.messageRecieved)
        self.connect(self.netconnector,QtCore.SIGNAL("socketError(QString)"),self.socketError)

    def connected(self):
        self.ui.textEdit.append("Connected")
  
    def messageRecieved(self,data):
        self.ui.textEdit.append(data)
        
    def socketError(self,msg):
        print msg
        self.ui.textEdit.append("Encountered a socket error:\n %s" % msg)
    

class NetConnectWorker(QtCore.QThread):
    
    def __init__(self,parent=None):
        super(NetConnectWorker,self).__init__(parent)
        self.exiting = False
        self.socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.host = ''
        self.port = 50000
        self.backlog = 5
        self.address = ""
        self.client = ""
    
    def __del__(self):
        self.exiting = True
        self.wait()
        if self.client:
            self.client.close()
            
    def attemptConnect(self):
        self.start()
        
    def run(self):
        try:
            self.socket.bind((self.host,self.port))
        except socket.error,error:
            self.emit(QtCore.SIGNAL("socketError(QString)"),error.message)
            self.exit()  
        self.socket.listen(self.backlog)
        
        self.client , self.address = self.socket.accept()
        
        if self.client:
            self.emit(QtCore.SIGNAL("Connected()"))
            
        while not self.exiting:
            data = self.client.recv(1024)
            if data:
                self.emit(QtCore.SIGNAL("dataRecieved(QString)"),data)
        
            
        
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    sv=Server()
    sv.show()
    sys.exit(app.exec_())
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'chat.ui'
#
# Created: Mon Jun 27 14:02:52 2011
#      by: PyQt4 UI code generator 4.8.4
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(523, 409)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setMargin(0)
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        self.textEdit = QtGui.QTextEdit(self.centralwidget)
        self.textEdit.setReadOnly(True)
        self.textEdit.setObjectName(_fromUtf8("textEdit"))
        self.verticalLayout.addWidget(self.textEdit)
        self.lineEdit = QtGui.QLineEdit(self.centralwidget)
        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
        self.verticalLayout.addWidget(self.lineEdit)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))

_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to