diff --git a/src/pretix/api/views/exporters.py b/src/pretix/api/views/exporters.py index c87893d2c5..a4823bd290 100644 --- a/src/pretix/api/views/exporters.py +++ b/src/pretix/api/views/exporters.py @@ -69,7 +69,7 @@ class ExportersMixin: cf = get_object_or_404(CachedFile, id=kwargs['cfid']) if cf.file: resp = ChunkBasedFileResponse(cf.file.file, content_type=cf.type) - resp['Content-Disposition'] = 'attachment; filename="{}"'.format(cf.filename) + resp['Content-Disposition'] = 'attachment; filename="{}"'.format(cf.filename).encode("ascii", "ignore") return resp elif not settings.HAS_CELERY: return Response( diff --git a/src/pretix/base/views/cachedfiles.py b/src/pretix/base/views/cachedfiles.py index b95e5ab7e4..c0690a475d 100644 --- a/src/pretix/base/views/cachedfiles.py +++ b/src/pretix/base/views/cachedfiles.py @@ -47,7 +47,7 @@ class DownloadView(TemplateView): return HttpResponse('1' if self.object.file else '0') elif self.object.file: resp = ChunkBasedFileResponse(self.object.file.file, content_type=self.object.type) - resp['Content-Disposition'] = 'attachment; filename="{}"'.format(self.object.filename) + resp['Content-Disposition'] = 'attachment; filename="{}"'.format(self.object.filename).encode('ascii', 'ignore') return resp else: return super().get(request, *args, **kwargs) diff --git a/src/pretix/presale/views/cart.py b/src/pretix/presale/views/cart.py index b1be0668f2..8e05a98160 100644 --- a/src/pretix/presale/views/cart.py +++ b/src/pretix/presale/views/cart.py @@ -661,5 +661,5 @@ class AnswerDownload(EventViewMixin, View): resp['Content-Disposition'] = 'attachment; filename="{}-cart-{}"'.format( self.request.event.slug.upper(), os.path.basename(answer.file.name).split('.', 1)[1] - ) + ).encode("ascii", "ignore") return resp