pyscalpel.encoding
Utilities for encoding data.
1""" 2 Utilities for encoding data. 3""" 4 5from urllib.parse import unquote_to_bytes as urllibdecode 6from _internal_mitmproxy.utils import strutils 7 8 9# str/bytes conversion helpers from mitmproxy/http.py: 10# https://github.com/mitmproxy/mitmproxy/blob/main/mitmproxy/http.py#:~:text=def-,_native,-(x%3A 11def always_bytes(data: str | bytes | int, encoding="latin-1") -> bytes: 12 """Convert data to bytes 13 14 Args: 15 data (str | bytes | int): The data to convert 16 17 Returns: 18 bytes: The converted bytes 19 """ 20 if isinstance(data, int): 21 data = str(data) 22 return strutils.always_bytes(data, encoding, "surrogateescape") 23 24 25def always_str(data: str | bytes | int, encoding="latin-1") -> str: 26 """Convert data to string 27 28 Args: 29 data (str | bytes | int): The data to convert 30 31 Returns: 32 str: The converted string 33 """ 34 if isinstance(data, int): 35 return str(data) 36 return strutils.always_str(data, encoding, "surrogateescape") 37 38 39 40def urlencode_all(data: bytes | str, encoding="latin-1") -> bytes: 41 """URL Encode all bytes in the given bytes object""" 42 return "".join(f"%{b:02X}" for b in always_bytes(data, encoding)).encode(encoding) 43 44 45def urldecode(data: bytes | str, encoding="latin-1") -> bytes: 46 """URL Decode all bytes in the given bytes object""" 47 return urllibdecode(always_bytes(data, encoding))
def
always_bytes(data: str | bytes | int, encoding='latin-1') -> bytes:
12def always_bytes(data: str | bytes | int, encoding="latin-1") -> bytes: 13 """Convert data to bytes 14 15 Args: 16 data (str | bytes | int): The data to convert 17 18 Returns: 19 bytes: The converted bytes 20 """ 21 if isinstance(data, int): 22 data = str(data) 23 return strutils.always_bytes(data, encoding, "surrogateescape")
Convert data to bytes
Args: data (str | bytes | int): The data to convert
Returns: bytes: The converted bytes
def
always_str(data: str | bytes | int, encoding='latin-1') -> str:
26def always_str(data: str | bytes | int, encoding="latin-1") -> str: 27 """Convert data to string 28 29 Args: 30 data (str | bytes | int): The data to convert 31 32 Returns: 33 str: The converted string 34 """ 35 if isinstance(data, int): 36 return str(data) 37 return strutils.always_str(data, encoding, "surrogateescape")
Convert data to string
Args: data (str | bytes | int): The data to convert
Returns: str: The converted string
def
urlencode_all(data: bytes | str, encoding='latin-1') -> bytes:
41def urlencode_all(data: bytes | str, encoding="latin-1") -> bytes: 42 """URL Encode all bytes in the given bytes object""" 43 return "".join(f"%{b:02X}" for b in always_bytes(data, encoding)).encode(encoding)
URL Encode all bytes in the given bytes object
def
urldecode(data: bytes | str, encoding='latin-1') -> bytes:
46def urldecode(data: bytes | str, encoding="latin-1") -> bytes: 47 """URL Decode all bytes in the given bytes object""" 48 return urllibdecode(always_bytes(data, encoding))
URL Decode all bytes in the given bytes object