2017-05-11 4 views
0

Je souhaite fournir aux utilisateurs une fonctionnalité pour télécharger des fichiers CSV, qui seront créés lorsque la requête est effectuée, par ex. l'utilisateur fait la demande, les données sont extraites de la base de données et ensuite le fichier est créé. Je voudrais utiliser un encodage spécifique (UTF-8 dans mon cas). Quand je ne spécifie pas l'encodage, je pense que le codage local du serveur est utilisé (dans mon cas ascii-us). J'ai donc essayé de passer l'encodage en entête, mais sans succès - l'encodage est toujours ascii-us. Voici mon code.Comment spécifier le codage de fichier CSV lors du téléchargement avec Tornado en Python?

class CsvHandler(RequestHandler): 
     lines = ['line1', 'line2'] # in actual use case those lines are from DB 
     def get(self): 
      self.set_header('Content-Type', 'text/csv') 
      self.set_header('Content-Disposition', 'attachment; filename=' + filename) 
      self.set_header('Content-Encoding', 'UTF-8') 

      for line in lines: 
       self.write(line.encode('UTF-8')) 

Voici les détails du fichier téléchargé:

fichier

-i mon_fichier.csv
mon_fichier.csv: text/plain; charset = us-ascii

Je voudrais avoir charset = UTF8

Merci!

Répondre

0

Vous pouvez essayer

class CsvHandler(RequestHandler): 
    lines = ['line1', 'line2'] # in actual use case those lines are from DB 
    def get(self): 
     self.set_header('Content-Type', 'text/csv') 
     self.set_header('Content-Disposition', 'attachment; filename=' + filename) 

     for line in lines: 
      self.write(line.encode("UTF-8")) 
+0

essayé en attendant, encore quand je vérifie le type après le téléchargement, il est nous-ascii – giliev

+0

au lieu de coder toute brute, coder chaque champs séparément. – Anoop

+0

essayé aussi, n'a pas fonctionné – giliev