[Python-Dev] PEP 461 Final? (original) (raw)

Neil Schemenauer nas at arctrix.com
Sun Jan 19 02:21:25 CET 2014


Ethan Furman <ethan at stoneleaf.us> wrote:

So, if %a is added it would act like:

--------- "%a" % someobj --------- tmp = str(someobj) res = b'' for ch in tmp: if ord(ch) < 256: res += bytes([ord(ch)] else: res += unicodeescape(ch) --------- where 'unicodeescape' would yield something like "\u0440" ?

My patch on the tracker already implements %a, it's simple. Just call PyObject_ASCII() (same as ascii()) then call PyUnicode_AsLatin1String(s) to convert it to bytes and stick it in. PyObject_ASCII does not return non-ASCII characters, no decode error is possible. We could call _PyUnicode_AsASCIIString(s, "strict") instead if we are afraid for non-ASCII bytes coming out of PyObject_ASCII.

Neil



More information about the Python-Dev mailing list