codekingpro/portable-devtools
115k
1import unicodedata2import sys3 4 5# HFS Plus uses decomposed UTF-86def decompose(path):7 if isinstance(path, str):8 return unicodedata.normalize('NFD', path)9 try:10 path = path.decode('utf-8')11 path = unicodedata.normalize('NFD', path)12 path = path.encode('utf-8')13 except UnicodeError:14 pass # Not UTF-815 return path16 17 18def filesys_decode(path):19 """20 Ensure that the given path is decoded,21 ``None`` when no expected encoding works22 """23 24 if isinstance(path, str):25 return path26 27 fs_enc = sys.getfilesystemencoding() or 'utf-8'28 candidates = fs_enc, 'utf-8'29 30 for enc in candidates:31 try:32 return path.decode(enc)33 except UnicodeDecodeError:34 continue35 36 return None37 38 39def try_encode(string, enc):40 "turn unicode encoding into a functional routine"41 try:42 return string.encode(enc)43 except UnicodeEncodeError:44 return None45 