[python] XMLRPC a unicode
Bystroushaak
Bystrousak na seznam.cz
Pátek Červen 12 13:16:44 CEST 2009
Ja bych to tak resil taky.
> ------------ Původní zpráva ------------
> Od: slush <slush na slush.cz>
> Předmět: Re: [python] XMLRPC a unicode
> Datum: 12.6.2009 02:46:11
> ----------------------------------------
> Pokud by to nekoho zajimalo, problem jsem (docasne nafurt) vyresil
> timto zpusobem:
>
> #!/usr/bin/python
> from SimpleXMLRPCServer import SimpleXMLRPCServer
> from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler
> import serial
> import base64
>
> device = '/dev/arduino'
> baud = 57600
> timeout = 1
>
> server_listen = 'localhost'
> server_port = 8000
>
> class NetSerial(serial.Serial):
> # Original function returns bool sometimes...
> def inWaiting_int(self):
> return int(self.inWaiting())
>
> # Beware UTF-8 :-)
> def write_base64(self, s):
> self.write(base64.b64decode(s))
>
> class RequestHandler(SimpleXMLRPCRequestHandler):
> rpc_paths = ('/RPC2',)
>
> server = SimpleXMLRPCServer((server_listen, server_port),
> requestHandler=RequestHandler,
> allow_none=True, encoding='ascii')
>
> server.register_introspection_functions()
> server.register_instance(NetSerial(device, baud, timeout=timeout))
> server.serve_forever()
>
> pyserial jsem tedy rozsiril o funkci write_base64, ktera uz tedy
> nemusi resit UTF-8 ;-). Predpokladam, ze stejny hack bude fungovat i
> na read, az to budu potrebovat. Reseni bohuzel neni transparentni a
> trida nema s pyserial kompatibilni rozhrani, ale co se da delat. Kdyby
> nekdo vedel, jak presvedcit XMLRPC s UTF, rad to upravim.
>
> Ostatne v reseni bylo zapotrebi udelat jeste hack s inWaiting(). Moc
> jsem to nestudoval, ale zda se, ze takhle to funguje...
>
> Marek
>
> 2009/6/12 slush <slush na slush.cz>:
> > Zdravim,
> >
> > potrebuji pristupovat k seriovemu portu pocitace A z pocittace B na
> > lokalni siti. Napadlo me pouzit XML-RPC jako transparentni mezivrstvu
> > k pyserial tak, ze se klientska aplikace (puvodne bezici na A, nyni
> > nove na B) temer nemusi upravovat - pouze misto lokalni instance
> > pyserial vytvorim klienta XMLRPC.
> >
> > Zda se, ze by to i mohlo fungovat, bohuzel na port potrebuji posilat
> > binarni data. A zde jsem narazil na problem s kodovanim znaku u
> > knihovny xmlrpclib. Pri snaze zapsat binarni data mi to vrati tento
> > traceback:
> >
> > File "/usr/lib/python2.6/encodings/utf_8.py", line 16, in decode
> > return codecs.utf_8_decode(input, errors, True)
> > UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0:
> > unexpected code byte
> >
> > Data skladam nasledujicim zpusobem:
> > data = chr(255)+'a'+chr(e.axis)+chr(mapped)
> > kde e.axis i mapped jsou 1B cisla. Jedna se tedy o obycejne ASCII.
> >
> > S tim si bohuzel nevim rady, UTF jsem se v pythonu vzdy vyhybal, jako
> > cert krizi. Nedokaze nekdo poradit, prosim?
> >
> >
> > S pozdravem
> > Marek
> >
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
>
>
Další informace o konferenci Python