diff --git a/lib/matplotlib/backend_bases.py b/lib/matplotlib/backend_bases.py index f4273bc03919..28815f60630a 100644 --- a/lib/matplotlib/backend_bases.py +++ b/lib/matplotlib/backend_bases.py @@ -2241,15 +2241,22 @@ def get_default_filetype(cls): def get_default_filename(self): """ - Return a string, which includes extension, suitable for use as - a default filename. - """ - basename = (self.manager.get_window_title() if self.manager is not None - else '') - basename = (basename or 'image').replace(' ', '_') - filetype = self.get_default_filetype() - filename = basename + '.' + filetype - return filename + Return a suitable default filename, including the extension. + """ + default_basename = ( + self.manager.get_window_title() + if self.manager is not None + else '' + ) + default_basename = default_basename or 'image' + # Characters to be avoided in a NT path: + # https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx#naming_conventions + # plus ' ' + removed_chars = r'<>:"/\|?*\0 ' + default_basename = default_basename.translate( + {ord(c): "_" for c in removed_chars}) + default_filetype = self.get_default_filetype() + return f'{default_basename}.{default_filetype}' @_api.deprecated("3.8") def switch_backends(self, FigureCanvasClass):