_compat.py 513 B

12345678910111213141516171819202122
  1. from __future__ import annotations
  2. import contextlib
  3. import sys
  4. from typing import Any
  5. PY38 = sys.version_info >= (3, 8)
  6. def decode(string: Any, encodings: list[str] | None = None):
  7. if not isinstance(string, bytes):
  8. return string
  9. encodings = encodings or ["utf-8", "latin1", "ascii"]
  10. for encoding in encodings:
  11. with contextlib.suppress(UnicodeEncodeError, UnicodeDecodeError):
  12. return string.decode(encoding)
  13. return string.decode(encodings[0], errors="ignore")