Merge remote-tracking branch 'Asido/master'
[youtube-dl] / youtube_dl / utils.py
index 3339f56ec114fab13b39afeef2fcef60506c8ec5..40d6823a0f8ddbbf42a54bf4b0aea9e344825600 100644 (file)
@@ -37,15 +37,13 @@ def preferredencoding():
        Returns the best encoding scheme for the system, based on
        locale.getpreferredencoding() and some further tweaks.
        """
        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):
 
 
 def htmlentity_transform(matchobj):
@@ -208,7 +206,7 @@ def sanitize_filename(s, restricted=False):
                        return '_-' if restricted else ' -'
                elif char in '\\/|*<>':
                        return '_'
                        return '_-' if restricted else ' -'
                elif char in '\\/|*<>':
                        return '_'
-               if restricted and (char in '&\'' or char.isspace()):
+               if restricted and (char in '!&\'' or char.isspace()):
                        return '_'
                if restricted and ord(char) > 127:
                        return '_'
                        return '_'
                if restricted and ord(char) > 127:
                        return '_'
@@ -218,6 +216,9 @@ def sanitize_filename(s, restricted=False):
        while '__' in result:
                result = result.replace('__', '_')
        result = 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
        if not result:
                result = '_'
        return result
@@ -313,7 +314,7 @@ class ContentTooShortError(Exception):
 
 class Trouble(Exception):
        """Trouble helper exception
 
 class Trouble(Exception):
        """Trouble helper exception
-       
+
        This is an exception to be handled with
        FileDownloader.trouble
        """
        This is an exception to be handled with
        FileDownloader.trouble
        """