diff options
Diffstat (limited to 'youtube_dl/utils.py')
| -rw-r--r-- | youtube_dl/utils.py | 49 | 
1 files changed, 34 insertions, 15 deletions
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 5e1c4525d..7de7742e3 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -371,6 +371,18 @@ def unescapeHTML(s):          r'&([^;]+);', lambda m: _htmlentity_transform(m.group(1)), s) +def get_subprocess_encoding(): +    if sys.platform == 'win32' and sys.getwindowsversion()[0] >= 5: +        # For subprocess calls, encode with locale encoding +        # Refer to http://stackoverflow.com/a/9951851/35070 +        encoding = preferredencoding() +    else: +        encoding = sys.getfilesystemencoding() +    if encoding is None: +        encoding = 'utf-8' +    return encoding + +  def encodeFilename(s, for_subprocess=False):      """      @param s The name of the file @@ -382,21 +394,24 @@ def encodeFilename(s, for_subprocess=False):      if sys.version_info >= (3, 0):          return s -    if sys.platform == 'win32' and sys.getwindowsversion()[0] >= 5: -        # Pass '' directly to use Unicode APIs on Windows 2000 and up -        # (Detecting Windows NT 4 is tricky because 'major >= 4' would -        # match Windows 9x series as well. Besides, NT 4 is obsolete.) -        if not for_subprocess: -            return s -        else: -            # For subprocess calls, encode with locale encoding -            # Refer to http://stackoverflow.com/a/9951851/35070 -            encoding = preferredencoding() -    else: -        encoding = sys.getfilesystemencoding() -    if encoding is None: -        encoding = 'utf-8' -    return s.encode(encoding, 'ignore') +    # Pass '' directly to use Unicode APIs on Windows 2000 and up +    # (Detecting Windows NT 4 is tricky because 'major >= 4' would +    # match Windows 9x series as well. Besides, NT 4 is obsolete.) +    if not for_subprocess and sys.platform == 'win32' and sys.getwindowsversion()[0] >= 5: +        return s + +    return s.encode(get_subprocess_encoding(), 'ignore') + + +def decodeFilename(b, for_subprocess=False): + +    if sys.version_info >= (3, 0): +        return b + +    if not isinstance(b, bytes): +        return b + +    return b.decode(get_subprocess_encoding(), 'ignore')  def encodeArgument(s): @@ -408,6 +423,10 @@ def encodeArgument(s):      return encodeFilename(s, True) +def decodeArgument(b): +    return decodeFilename(b, True) + +  def decodeOption(optval):      if optval is None:          return optval  | 
