浏览代码

[extractor/common] Properly decode error string on python 2 (Closes #1354, closes #3957, closes #4037, closes #6449)

Sergey M․ 9 年之前
父节点
当前提交
dd85e4d707
共有 1 个文件被更改,包括 7 次插入1 次删除
  1. 7 1
      youtube_dl/extractor/common.py

+ 7 - 1
youtube_dl/extractor/common.py

@@ -34,6 +34,7 @@ from ..utils import (
     fix_xml_ampersands,
     fix_xml_ampersands,
     float_or_none,
     float_or_none,
     int_or_none,
     int_or_none,
+    preferredencoding,
     RegexNotFoundError,
     RegexNotFoundError,
     sanitize_filename,
     sanitize_filename,
     sanitized_Request,
     sanitized_Request,
@@ -332,7 +333,12 @@ class InfoExtractor(object):
                 return False
                 return False
             if errnote is None:
             if errnote is None:
                 errnote = 'Unable to download webpage'
                 errnote = 'Unable to download webpage'
-            errmsg = '%s: %s' % (errnote, compat_str(err))
+            err_str = str(err)
+            # On python 2 error byte string must be decoded with proper
+            # encoding rather than ascii
+            if sys.version_info[0] < 3:
+                err_str = err_str.decode(preferredencoding())
+            errmsg = '%s: %s' % (errnote, err_str)
             if fatal:
             if fatal:
                 raise ExtractorError(errmsg, sys.exc_info()[2], cause=err)
                 raise ExtractorError(errmsg, sys.exc_info()[2], cause=err)
             else:
             else: