Ja bych to tak resil taky.
> ------------ Původní zpráva ------------ > Od: slush <[email protected]> > 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 <[email protected]>: > > 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 > [email protected] > http://www.py.cz/mailman/listinfo/python > > > _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
