| 123456789101112131415161718192021222324252627282930313233343536373839404142 | import unicodedataimport sys# HFS Plus uses decomposed UTF-8def decompose(path):    if isinstance(path, str):        return unicodedata.normalize('NFD', path)    try:        path = path.decode('utf-8')        path = unicodedata.normalize('NFD', path)        path = path.encode('utf-8')    except UnicodeError:        pass  # Not UTF-8    return pathdef filesys_decode(path):    """    Ensure that the given path is decoded,    NONE when no expected encoding works    """    if isinstance(path, str):        return path    fs_enc = sys.getfilesystemencoding() or 'utf-8'    candidates = fs_enc, 'utf-8'    for enc in candidates:        try:            return path.decode(enc)        except UnicodeDecodeError:            continuedef try_encode(string, enc):    "turn unicode encoding into a functional routine"    try:        return string.encode(enc)    except UnicodeEncodeError:        return None
 |