Regardless of using python2 or python3, libftdi’s write_data takes a “string”. 
In python2 this means bytes and in python3 this means unicode.


My problem is that certain strings are not being written properly with python3. 
For example, when ‘\xAB’ is encoded to bytes with UTF-8 (as it does in 
libftdi), it turns into b’\xC2\xAB’.


I have a temporary fix that is working for me and it involves modifying the 
swig built file `build/python/ftdi1PYTHON_wrap.c`. In the function 
SWIG_AsCharPtrAndSize I replace PyUnicode_AsUTF8String with 
PyUnicode_AsLatin1String in line 3161. Now python3 unicode strings are 
converted using Latin-1 so my example ‘\xAB’ converts to the byte b’\AB’ 
instead of the bytes b’\xC2\xAB’.


I know this fix is not the proper way to do this but it is working for me. Can 
you please investigate this issue and fix the library to work with all python3 
strings?


Another option I would be happy with is for ftdi.write_data to accept python3 
bytes instead of unicode. As of now, if you try and actually pass the bytes 
b’\xAB’ to write_data, libftdi complains about the type not being correct.

--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi+unsubscr...@developer.intra2net.com   

Reply via email to