Print

Print


In Python 3, strings are bytes interpreted as UTF-8. This means one cannot use arbitrary byte sequences to construct a str because Python will try to interpret the bytes as UTF-8, throwing a UnicodeDecodeError on failure. Instead, byte sequences should be returned as bytes objects.

As an example where this fails in pyxrootd, the File::Read method tries to build a string from the result of reading a file:

pyresponse = Py_BuildValue( "s#", buffer, bytesRead );

The s# notation means

Convert a C string and its length to a Python str object using 'utf-8' encoding. If the C string pointer is NULL, the length is ignored and None is returned.

This will fail in general, as not all byte sequences are sequences of valid UTF-8 codes. A sufficient fix might be to use y# instead.


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.

{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/xrootd/xrootd","title":"xrootd/xrootd","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/xrootd/xrootd"}},"updates":{"snippets":[{"icon":"DESCRIPTION","message":"Python 3 return types (#632)"}],"action":{"name":"View Issue","url":"https://github.com/xrootd/xrootd/issues/632"}}}

Use REPLY-ALL to reply to list

To unsubscribe from the XROOTD-DEV list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=XROOTD-DEV&A=1