codekingpro/portable-devtools
115k
1import json2import base643import struct4 5 6def to_bytes(x, charset='utf-8', errors='strict'):7 if x is None:8 return None9 if isinstance(x, bytes):10 return x11 if isinstance(x, str):12 return x.encode(charset, errors)13 if isinstance(x, (int, float)):14 return str(x).encode(charset, errors)15 return bytes(x)16 17 18def to_unicode(x, charset='utf-8', errors='strict'):19 if x is None or isinstance(x, str):20 return x21 if isinstance(x, bytes):22 return x.decode(charset, errors)23 return str(x)24 25 26def to_native(x, encoding='ascii'):27 if isinstance(x, str):28 return x29 return x.decode(encoding)30 31 32def json_loads(s):33 return json.loads(s)34 35 36def json_dumps(data, ensure_ascii=False):37 return json.dumps(data, ensure_ascii=ensure_ascii, separators=(',', ':'))38 39 40def urlsafe_b64decode(s):41 s += b'=' * (-len(s) % 4)42 return base64.urlsafe_b64decode(s)43 44 45def urlsafe_b64encode(s):46 return base64.urlsafe_b64encode(s).rstrip(b'=')47 48 49def base64_to_int(s):50 data = urlsafe_b64decode(to_bytes(s, charset='ascii'))51 buf = struct.unpack('%sB' % len(data), data)52 return int(''.join(["%02x" % byte for byte in buf]), 16)53 54 55def int_to_base64(num):56 if num < 0:57 raise ValueError('Must be a positive integer')58 59 s = num.to_bytes((num.bit_length() + 7) // 8, 'big', signed=False)60 return to_unicode(urlsafe_b64encode(s))61 62 63def json_b64encode(text):64 if isinstance(text, dict):65 text = json_dumps(text)66 return urlsafe_b64encode(to_bytes(text))67 