What I aim to achieve is to:
string like:
Bitte überprüfen Sie, ob die Dokumente erfolgreich in System eingereicht wurden, und löschen Sie dann die tatsächlichen Dokumente.
convert to:
'Bitte u00FCberpru00FCfen Sie, ob die Dokumente erfolgreich in System eingereicht wurden, und lu00F6schen Sie dann die tatsu00E4chlichen Dokumente.'
and write it in this form to file (which is UTF-8 encoded).
Advertisement
Answer
Another solution, not relying on the built-in repr()
but rather implementing it from scratch:
orig = 'Bitte überprüfen Sie, ob die Dokumente erfolgreich in System eingereicht wurden, und löschen Sie dann die tatsächlichen Dokumente.' enc = re.sub('[^ -~]', lambda m: '\u%04X' % ord(m[0]), orig) print(enc)
Differences:
- Encodes only using
u
, never any other sequence, whereasrepr()
uses about a third of the alphabet (so for example the BEL character will be encoded asu0007
rather thana
) - Upper-case encoding, as specified (
u00FC
rather thanu00fc
) - Does not handle unicode characters outside plane 0 (could be extended easily, given a spec for how those should be represented)
- It does not take care of any pre-existing
u
sequences, whereasrepr()
turns those into\u
; could be extended, perhaps to encodeas
u005C
:enc = re.sub(r'[^ -[]-~]', lambda m: '\u%04X' % ord(m[0]), orig)