Changeset View
Changeset View
Standalone View
Standalone View
pykolab/imap_utf7.py
Show First 20 Lines • Show All 107 Lines • ▼ Show 20 Lines | for c in s: | ||||
else: | else: | ||||
res.append(base64_utf7_decode(b64_buffer[1:])) | res.append(base64_utf7_decode(b64_buffer[1:])) | ||||
b64_buffer = bytearray() | b64_buffer = bytearray() | ||||
# Still buffering between the shift character and the shift back to ASCII | # Still buffering between the shift character and the shift back to ASCII | ||||
elif b64_buffer: | elif b64_buffer: | ||||
b64_buffer.append(c) | b64_buffer.append(c) | ||||
# No buffer initialized yet, should be an ASCII printable char | # No buffer initialized yet, should be an ASCII printable char | ||||
else: | else: | ||||
res.append(chr(c)) | res.append(c) | ||||
# Decode the remaining buffer if any | # Decode the remaining buffer if any | ||||
if b64_buffer: | if b64_buffer: | ||||
res.append(base64_utf7_decode(b64_buffer[1:])) | res.append(base64_utf7_decode(b64_buffer[1:])) | ||||
return "".join(res) | return "".join(res) | ||||
def base64_utf7_encode(buffer): | def base64_utf7_encode(buffer): | ||||
s = "".join(buffer).encode("utf-16be") | s = "".join(buffer).encode("utf-16be") | ||||
return binascii.b2a_base64(s).rstrip(b"\n=").replace(b"/", b",") | return binascii.b2a_base64(s).rstrip(b"\n=").replace(b"/", b",") | ||||
def base64_utf7_decode(s): | def base64_utf7_decode(s): | ||||
s_utf7 = b"+" + s.replace(b",", b"/") + b"-" | s_utf7 = b"+" + s.replace(b",", b"/") + b"-" | ||||
return s_utf7.decode("utf-7") | return s_utf7.decode("utf-7") |