| Index: recipe_engine/third_party/setuptools/unicode_utils.py
|
| diff --git a/recipe_engine/third_party/setuptools/unicode_utils.py b/recipe_engine/third_party/setuptools/unicode_utils.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d2de941a6973fb7fab4c630721854ee3649611c7
|
| --- /dev/null
|
| +++ b/recipe_engine/third_party/setuptools/unicode_utils.py
|
| @@ -0,0 +1,41 @@
|
| +import unicodedata
|
| +import sys
|
| +from setuptools.compat import unicode as decoded_string
|
| +
|
| +
|
| +# HFS Plus uses decomposed UTF-8
|
| +def decompose(path):
|
| + if isinstance(path, decoded_string):
|
| + 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
|
| + """
|
| +
|
| + fs_enc = sys.getfilesystemencoding()
|
| + if isinstance(path, decoded_string):
|
| + return path
|
| +
|
| + for enc in (fs_enc, "utf-8"):
|
| + 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
|
|
|