Hi, Gandia Augusto,

in contrast to cPython 2.7, IronPython does not have byte-strings. This is due 
to .NET - strings in .NET are always unicode, they're the same type there. And 
to convert an Unicode string to a byte array, you will always need an encoding.

The situation wr/t strings is much more similar to cPython 3.x, where str is 
always unicode.
Whether this concrete occurrence can be considered a bug in IronPython (it 
should be able to cope with it), I don't know.

On the other hand, a simple reproduction fails on my machine:
IronPython 2.7.5 (2.7.5.0) on .NET 4.0.30319.42000 (32-bit)
Type "help", "copyright", "credits" or "license" for more information.
>>> bytearray
<type 'bytearray'>
>>> bytearray('hallo')
bytearray(b'hallo')
>>> bytearray('halloäöü')
bytearray(b'hallo\xe4\xf6\xfc')
>>>

So there must be something more (which IronPython version are you using?)

However, you should be able to work around the problem by specifying an 
encoding:
>>> bytearray('halloäöü', "latin-1")
bytearray(b'hallo\xe4\xf6\xfc')
>>> bytearray('halloäöü', "utf-8")
bytearray(b'hallo\xc3\xa4\xc3\xb6\xc3\xbc')

So your code could look something like
...
    else:
        if type(signalValue) is bytearray:
            sigV = (ct.c_ubyte*len(signalValue))(*signalValue)
        if type(signalValue) is unicode:
            signalValue=bytearray(signalValue, 'ascii') # use whatever encoding 
is appropriate
            sigV = (ct.c_ubyte*len(signalValue))(*signalValue)
        if type(signalValue) is str:
            signalValue=bytearray(signalValue)
            sigV = (ct.c_ubyte*len(signalValue))(*signalValue)
...

Just make sure that you check for unicode before you check for str, as on 
Ironpython:
>>> unicode is str
True


Best regards

Markus Schaber

CODESYS® a trademark of 3S-Smart Software Solutions GmbH

Inspiring Automation Solutions
________________________________
3S-Smart Software Solutions GmbH
Dipl.-Inf. Markus Schaber | Product Development Core Technology
Memminger Str. 151 | 87439 Kempten | Germany
Tel. +49-831-54031-979 | Fax +49-831-54031-50

E-Mail: m.scha...@codesys.com<mailto:m.scha...@codesys.com> | Web: 
codesys.com<http://www.codesys.com> | CODESYS store: 
store.codesys.com<http://store.codesys.com>
CODESYS forum: forum.codesys.com<http://forum.codesys.com>

Managing Directors: Dipl.Inf. Dieter Hess, Dipl.Inf. Manfred Werner | Trade 
register: Kempten HRB 6186 | Tax ID No.: DE 167014915
________________________________
This e-mail may contain confidential and/or privileged information. If you are 
not the intended recipient (or have received
this e-mail in error) please notify the sender immediately and destroy this 
e-mail. Any unauthorised copying, disclosure
or distribution of the material in this e-mail is strictly forbidden.
Von: Ironpython-users 
[mailto:ironpython-users-bounces+m.schaber=codesys....@python.org] Im Auftrag 
von Gandia Augusto
Gesendet: Donnerstag, 30. Juli 2015 09:51
An: ironpython-users@python.org
Betreff: [Ironpython-users] question

In this function:

def simxWriteStringStream(clientID, signalName, signalValue, operationMode):
    '''
    Please have a look at the function description/documentation in the V-REP 
user manual
    '''

    sigV=signalValue
    if sys.version_info[0] == 3:
        if type(signalName) is str:
            signalName=signalName.encode('utf-8')
        if type(signalValue) is bytearray:
            sigV  = (ct.c_ubyte*len(signalValue))(*signalValue)
        if type(signalValue) is str:
            signalValue=signalValue.encode('utf-8')
            sigV  = (ct.c_ubyte*len(signalValue))(*signalValue)
    else:
        if type(signalValue) is bytearray:
            sigV = (ct.c_ubyte*len(signalValue))(*signalValue)
        if type(signalValue) is str:
            
signalValue=bytearray(signalValue)#<=============================================================HERE
 IS WHERE I GET THE ERROR
            sigV = (ct.c_ubyte*len(signalValue))(*signalValue)
    sigV=ct.cast(sigV,ct.POINTER(ct.c_ubyte)) # IronPython needs this
    return c_WriteStringStream(clientID, signalName, sigV, len(signalValue), 
operationMode)




The error I get is :

Program started
Connected to remote API server
Runtime error (TypeErrorException): unicode argument without an encoding
Traceback:
  line 1052, in simxWriteStringStream, "C:\Program Files 
(x86)\V-REP3\V-REP_PRO_EDU\programming\remoteApiBindings\python\python\vrep.py"
  line 70, in script


Any idea of what this could be?
_______________________________________________
Ironpython-users mailing list
Ironpython-users@python.org
https://mail.python.org/mailman/listinfo/ironpython-users

Reply via email to