23 lines
513 B
Python
23 lines
513 B
Python
|
from __future__ import annotations
|
||
|
|
||
|
import contextlib
|
||
|
import sys
|
||
|
|
||
|
from typing import Any
|
||
|
|
||
|
|
||
|
PY38 = sys.version_info >= (3, 8)
|
||
|
|
||
|
|
||
|
def decode(string: Any, encodings: list[str] | None = None):
|
||
|
if not isinstance(string, bytes):
|
||
|
return string
|
||
|
|
||
|
encodings = encodings or ["utf-8", "latin1", "ascii"]
|
||
|
|
||
|
for encoding in encodings:
|
||
|
with contextlib.suppress(UnicodeEncodeError, UnicodeDecodeError):
|
||
|
return string.decode(encoding)
|
||
|
|
||
|
return string.decode(encodings[0], errors="ignore")
|