@@ -291,28 +291,31 @@ def __call__(
291291
292292 # Export as one json-file through the browser
293293 else :
294- with tempfile .TemporaryFile (mode = "w+" ) as f :
294+ with tempfile .TemporaryFile (mode = "w+b " ) as f :
295295 self .start ()
296296 for number , datum in enumerate (content_generator , start = 1 ):
297297 if number == 1 :
298- f .write ("[" )
298+ f .write (b "[" )
299299 else :
300- f .write ("," )
301- json .dump (datum , f , sort_keys = True , indent = 4 )
300+ f .write (b"," )
301+ json_data = json .dumps (datum , sort_keys = True , indent = 4 ).encode ('utf-8' )
302+ f .write (json_data )
302303 if number :
303304 if self .errors and self .write_errors :
304- f .write ("," )
305+ f .write (b "," )
305306 errors = {"unexported_paths" : self .errors }
306- json .dump (errors , f , indent = 4 )
307- f .write ("]" )
307+ json_data = json .dumps (errors , indent = 4 ).encode ('utf-8' )
308+ f .write (json_data )
309+ f .write (b"]" )
308310 msg = _ (u"Exported {} {} with {} errors" ).format (
309311 number , self .portal_type , len (self .errors )
310312 )
311313 logger .info (msg )
312314 api .portal .show_message (msg , self .request )
313315 response = self .request .response
314- response .setHeader ("content-type" , "application/json" )
315- response .setHeader ("content-length" , f .tell ())
316+ response .setHeader ("content-type" , "application/json; charset=utf-8" )
317+ content_length = f .tell ()
318+ response .setHeader ("content-length" , content_length )
316319 response .setHeader (
317320 "content-disposition" ,
318321 'attachment; filename="{0}"' .format (filename ),
@@ -324,7 +327,7 @@ def __call__(
324327 noLongerProvides (self .request , IPathBlobsMarker )
325328 f .seek (0 )
326329 self .finish ()
327- return response .write (safe_bytes ( f .read () ))
330+ return response .write (f .read ())
328331
329332 def update (self ):
330333 """Hook to do something before export."""
0 commit comments