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.
        """
-       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):
@@ -208,7 +206,7 @@ def sanitize_filename(s, restricted=False):
                        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 '_'
@@ -218,6 +216,9 @@ def sanitize_filename(s, restricted=False):
        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
@@ -313,7 +314,7 @@ class ContentTooShortError(Exception):
 
 class Trouble(Exception):
        """Trouble helper exception
-       
+
        This is an exception to be handled with
        FileDownloader.trouble
        """