X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Futils.py;h=40d6823a0f8ddbbf42a54bf4b0aea9e344825600;hb=1a9c655e3b1569f315d4193e877cba0b4a863c63;hp=55f2fe02c0dc204ed6036bdab205896679699f71;hpb=1c469a9480e9d8bea45950898eb46e07b0c58290;p=youtube-dl diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 55f2fe02c..40d6823a0 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -37,15 +37,13 @@ def preferredencoding(): Returns the best encoding scheme for the system, based on locale.getpreferredencoding() and some further tweaks. """ - def yield_preferredencoding(): - try: - pref = locale.getpreferredencoding() - u'TEST'.encode(pref) - except: - pref = 'UTF-8' - while True: - yield pref - return yield_preferredencoding().next() + try: + pref = locale.getpreferredencoding() + u'TEST'.encode(pref) + except: + pref = 'UTF-8' + + return pref def htmlentity_transform(matchobj): @@ -203,19 +201,27 @@ def sanitize_filename(s, restricted=False): if char == '?' or ord(char) < 32 or ord(char) == 127: return '' elif char == '"': - return '' if restricted else 'FOO\'' + return '' if restricted else '\'' elif char == ':': return '_-' if restricted else ' -' elif char in '\\/|*<>': - return '-' - if restricted and (char in '&\'' or char.isspace()): + return '_' + if restricted and (char in '!&\'' or char.isspace()): + return '_' + if restricted and ord(char) > 127: return '_' return char result = u''.join(map(replace_insane, s)) - while '--' in result: - result = result.replace('--', '-') - return result.strip('-') + while '__' in result: + result = result.replace('__', '_') + result = result.strip('_') + # Common case of "Foreign band name - English song title" + if restricted and result.startswith('-_'): + result = result[2:] + if not result: + result = '_' + return result def orderedSet(iterable): """ Remove all duplicates from the input iterable """ @@ -308,7 +314,7 @@ class ContentTooShortError(Exception): class Trouble(Exception): """Trouble helper exception - + This is an exception to be handled with FileDownloader.trouble """