| import unicodedata
|
| import sys
|
|
|
|
|
|
|
| def 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
|
| return path
|
|
|
|
|
| def 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:
|
| continue
|
|
|
|
|
| def try_encode(string, enc):
|
| "turn unicode encoding into a functional routine"
|
| try:
|
| return string.encode(enc)
|
| except UnicodeEncodeError:
|
| return None
|
|
|