1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- import unicodedata
- import sys
- from setuptools.extern import six
- # HFS Plus uses decomposed UTF-8
- def decompose(path):
- if isinstance(path, six.text_type):
- 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, six.text_type):
- 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
|