mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-03 22:47:06 -05:00 
			
		
		
		
	Use --encoding when outputting
This commit is contained in:
		@@ -286,6 +286,9 @@ class YoutubeDL(object):
 | 
			
		||||
        """Print message to stdout if not in quiet mode."""
 | 
			
		||||
        return self.to_stdout(message, skip_eol, check_quiet=True)
 | 
			
		||||
 | 
			
		||||
    def _write_string(self, s, out=None):
 | 
			
		||||
        write_string(s, out=out, encoding=self.get_encoding())
 | 
			
		||||
 | 
			
		||||
    def to_stdout(self, message, skip_eol=False, check_quiet=False):
 | 
			
		||||
        """Print message to stdout if not in quiet mode."""
 | 
			
		||||
        if self.params.get('logger'):
 | 
			
		||||
@@ -295,7 +298,7 @@ class YoutubeDL(object):
 | 
			
		||||
            terminator = ['\n', ''][skip_eol]
 | 
			
		||||
            output = message + terminator
 | 
			
		||||
 | 
			
		||||
            write_string(output, self._screen_file)
 | 
			
		||||
            self._write_string(output, self._screen_file)
 | 
			
		||||
 | 
			
		||||
    def to_stderr(self, message):
 | 
			
		||||
        """Print message to stderr."""
 | 
			
		||||
@@ -305,7 +308,7 @@ class YoutubeDL(object):
 | 
			
		||||
        else:
 | 
			
		||||
            message = self._bidi_workaround(message)
 | 
			
		||||
            output = message + '\n'
 | 
			
		||||
            write_string(output, self._err_file)
 | 
			
		||||
            self._write_string(output, self._err_file)
 | 
			
		||||
 | 
			
		||||
    def to_console_title(self, message):
 | 
			
		||||
        if not self.params.get('consoletitle', False):
 | 
			
		||||
@@ -315,21 +318,21 @@ class YoutubeDL(object):
 | 
			
		||||
            # already of type unicode()
 | 
			
		||||
            ctypes.windll.kernel32.SetConsoleTitleW(ctypes.c_wchar_p(message))
 | 
			
		||||
        elif 'TERM' in os.environ:
 | 
			
		||||
            write_string('\033]0;%s\007' % message, self._screen_file)
 | 
			
		||||
            self._write_string('\033]0;%s\007' % message, self._screen_file)
 | 
			
		||||
 | 
			
		||||
    def save_console_title(self):
 | 
			
		||||
        if not self.params.get('consoletitle', False):
 | 
			
		||||
            return
 | 
			
		||||
        if 'TERM' in os.environ:
 | 
			
		||||
            # Save the title on stack
 | 
			
		||||
            write_string('\033[22;0t', self._screen_file)
 | 
			
		||||
            self._write_string('\033[22;0t', self._screen_file)
 | 
			
		||||
 | 
			
		||||
    def restore_console_title(self):
 | 
			
		||||
        if not self.params.get('consoletitle', False):
 | 
			
		||||
            return
 | 
			
		||||
        if 'TERM' in os.environ:
 | 
			
		||||
            # Restore the title from stack
 | 
			
		||||
            write_string('\033[23;0t', self._screen_file)
 | 
			
		||||
            self._write_string('\033[23;0t', self._screen_file)
 | 
			
		||||
 | 
			
		||||
    def __enter__(self):
 | 
			
		||||
        self.save_console_title()
 | 
			
		||||
@@ -1211,9 +1214,16 @@ class YoutubeDL(object):
 | 
			
		||||
        if not self.params.get('verbose'):
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        write_string('[debug] Encodings: locale %s, fs %s, out %s, pref %s\n' %
 | 
			
		||||
                 (locale.getpreferredencoding(), sys.getfilesystemencoding(), sys.stdout.encoding, self.get_encoding()))
 | 
			
		||||
        write_string('[debug] youtube-dl version ' + __version__ + '\n')
 | 
			
		||||
        write_string(
 | 
			
		||||
            '[debug] Encodings: locale %s, fs %s, out %s, pref %s\n' % (
 | 
			
		||||
                locale.getpreferredencoding(),
 | 
			
		||||
                sys.getfilesystemencoding(),
 | 
			
		||||
                sys.stdout.encoding,
 | 
			
		||||
                self.get_encoding()),
 | 
			
		||||
            encoding=None
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        self._write_string('[debug] youtube-dl version ' + __version__ + '\n')
 | 
			
		||||
        try:
 | 
			
		||||
            sp = subprocess.Popen(
 | 
			
		||||
                ['git', 'rev-parse', '--short', 'HEAD'],
 | 
			
		||||
@@ -1222,20 +1232,20 @@ class YoutubeDL(object):
 | 
			
		||||
            out, err = sp.communicate()
 | 
			
		||||
            out = out.decode().strip()
 | 
			
		||||
            if re.match('[0-9a-f]+', out):
 | 
			
		||||
                write_string('[debug] Git HEAD: ' + out + '\n')
 | 
			
		||||
                self._write_string('[debug] Git HEAD: ' + out + '\n')
 | 
			
		||||
        except:
 | 
			
		||||
            try:
 | 
			
		||||
                sys.exc_clear()
 | 
			
		||||
            except:
 | 
			
		||||
                pass
 | 
			
		||||
        write_string('[debug] Python version %s - %s' %
 | 
			
		||||
        self._write_string('[debug] Python version %s - %s' %
 | 
			
		||||
                     (platform.python_version(), platform_name()) + '\n')
 | 
			
		||||
 | 
			
		||||
        proxy_map = {}
 | 
			
		||||
        for handler in self._opener.handlers:
 | 
			
		||||
            if hasattr(handler, 'proxies'):
 | 
			
		||||
                proxy_map.update(handler.proxies)
 | 
			
		||||
        write_string('[debug] Proxy map: ' + compat_str(proxy_map) + '\n')
 | 
			
		||||
        self._write_string('[debug] Proxy map: ' + compat_str(proxy_map) + '\n')
 | 
			
		||||
 | 
			
		||||
    def _setup_opener(self):
 | 
			
		||||
        timeout_val = self.params.get('socket_timeout')
 | 
			
		||||
 
 | 
			
		||||
@@ -910,22 +910,25 @@ def platform_name():
 | 
			
		||||
    return res
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def write_string(s, out=None):
 | 
			
		||||
def write_string(s, out=None, encoding=None):
 | 
			
		||||
    if out is None:
 | 
			
		||||
        out = sys.stderr
 | 
			
		||||
    assert type(s) == compat_str
 | 
			
		||||
 | 
			
		||||
    if ('b' in getattr(out, 'mode', '') or
 | 
			
		||||
            sys.version_info[0] < 3):  # Python 2 lies about mode of sys.stderr
 | 
			
		||||
        s = s.encode(preferredencoding(), 'ignore')
 | 
			
		||||
        s = s.encode(encoding or preferredencoding(), 'ignore')
 | 
			
		||||
    try:
 | 
			
		||||
        out.write(s)
 | 
			
		||||
    except UnicodeEncodeError:
 | 
			
		||||
        # In Windows shells, this can fail even when the codec is just charmap!?
 | 
			
		||||
        # See https://wiki.python.org/moin/PrintFails#Issue
 | 
			
		||||
        if sys.platform == 'win32' and hasattr(out, 'encoding'):
 | 
			
		||||
            s = s.encode(out.encoding, 'ignore').decode(out.encoding)
 | 
			
		||||
            out.write(s)
 | 
			
		||||
        if sys.platform == 'win32':
 | 
			
		||||
            if not encoding and hasattr(out, 'encoding'):
 | 
			
		||||
                encoding = out.encoding
 | 
			
		||||
            if encoding:
 | 
			
		||||
                b = s.encode(encoding, 'ignore').decode(encoding)
 | 
			
		||||
                out.write(b)
 | 
			
		||||
        else:
 | 
			
		||||
            raise
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user