2016-11-14 2 views
0

Ich möchte eine persische (Farsi) Zeichenfolge mit Socket von Python zu einem anderen Python in Himbeere senden. Ich sehe ein Fragezeichen im Terminal und wenn ich das in eine TXT-Datei schreibe, sehe ich ÇÔÔÇÑ Zeichen (für ein Wort). Servercode:Persische Zeichenfolge mit Socket von Python zu Python senden

# -*- coding: cp1256 -*- 
import sys 
import time 
import os 
import SocketServer 
import thread 
import os.path 
import webbrowser 
import RPi.GPIO as GPIO 



    class MyTCPHandler(SocketServer.BaseRequestHandler): 
     """ 
      The reques 

t handler class for our server. 

     It is instantiated once per connection to the server, and must 
     override the handle() method to implement communication to the 
     client. 
     """ 

    def handle(self): 
     try: 
      # self.request is the TCP socket connected to the client 
      self.data = self.request.recv(1024).strip() 
      print "{} wrote:".format(self.client_address[0]) 


      text2=self.data 

      print type(text2) 

      text_file = open("Output.txt", "w") 
      text_file.write(text2) 
      text_file.close() 
      completeURL="http://10.7.6.172/GanjSearch.aspx?q=/%s/" %text2 
      print completeURL 
      webbrowser.open(completeURL) 

     except Exception, e: 
      print type(e) 
      print e 


if __name__ == "__main__": 
    HOST, PORT = "192.168.1.55", 9998 
    # Create the server, binding to localhost on port 9999 
    try: 
     server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) 
     # Activate the server; this will keep running until you 
     # interrupt the program with Ctrl-C 
     server.serve_forever() 
    except Exception, e: 
      print type(e) 
      print e 

Client-Code:

a="persian-word" 
socket.sendall(a) 

was muss ich tun?

+1

Sie sollten Ihren Code veröffentlichen, damit wir sehen, was Sie tun. – SergiyKolesnikov

+0

Sie kodieren Ihr Farsi-Zeichen in seiner UTF16-Darstellung, senden es dann über den Socket und dekodieren es erneut zum Farsi-Zeichen. Wenn Sie zum Beispiel die UTF16-Dezimalstelle des Zeichens haben wollen, dekodieren Sie es mit ** int (repr (data.decode ('utf-16')) [4: 8], 16) ** wenn Ihre "Daten" die Farsi sind Zeichen –

+0

@ Dr.JohnJamesCobra, wenn ich String nicht int wollen, muss ich String schreiben (repr (data..decode ('utf-16')) [4: 8], 16) ??? und wie muss ich codieren? – narges

Antwort

0

Ich benutze # -*- coding: utf-8 -*- anstelle von # -*- coding: cp1256 -*- oben in beiden Code (Client und Server). also ohne die Verwendung von Dekodier- und Kodierfunktionen, funktioniert es korrekt.

Verwandte Themen