43 lines
		
	
	
		
			941 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			941 B
		
	
	
	
		
			Python
		
	
	
	
	
	
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
 |