123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import unicodedata
- import sys
-
-
- # HFS Plus uses decomposed UTF-8
- 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 # Not UTF-8
- 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
|