diff options
| author | Jason R. Coombs <jaraco@jaraco.com> | 2021-11-10 12:12:49 -0500 |
|---|---|---|
| committer | Jason R. Coombs <jaraco@jaraco.com> | 2021-11-10 12:13:40 -0500 |
| commit | 958ce2304e153b274e2ff7b40b1e7d5ddd214904 (patch) | |
| tree | bb1b77cfc08c31fb69eebdb0c66f5c0dde3f5223 /setuptools/unicode_utils.py | |
| parent | 23f63dd44c5d9f75de195833d25a5f2872220c2b (diff) | |
| parent | 8af23a41194ae747faf3e60f9cc19141b5e7ad24 (diff) | |
| download | python-setuptools-git-958ce2304e153b274e2ff7b40b1e7d5ddd214904.tar.gz | |
Merge pull request #2866 into main.
Diffstat (limited to 'setuptools/unicode_utils.py')
| -rw-r--r-- | setuptools/unicode_utils.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/setuptools/unicode_utils.py b/setuptools/unicode_utils.py new file mode 100644 index 00000000..e84e65e3 --- /dev/null +++ b/setuptools/unicode_utils.py @@ -0,0 +1,42 @@ +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 |
