J'ai un problème avec les en-têtes HTTP, ils sont encodés en ASCII et je veux fournir une vue pour télécharger des fichiers dont les noms peuvent être non ASCII.Comment encoder le nom de fichier UTF8 pour les en-têtes HTTP? (Python, Django)
response['Content-Disposition'] = 'attachment; filename="%s"' % (vo.filename.encode("ASCII","replace"),)
Je ne veux pas utiliser des fichiers statiques qui servent à même problème avec les noms de fichiers non ASCII, mais dans ce cas il y aurait un problème avec le système de fichiers et il est l'encodage du nom de fichier. (Je ne connais pas l'os cible.)
J'ai déjà essayé urllib.quote(), mais cela soulève l'exception KeyError.
Peut-être que je fais quelque chose de mal mais c'est peut-être impossible.
Je me rends compte que j'ai des années de retard, mais ... l'exception KeyError me dérange vraiment. Je ne veux pas dire simplement "de temps en temps je rencontre ce problème", je veux dire, j'ai soumis un correctif à Python pour corriger cela il ya quelques années, argumenté pendant un certain temps, puis décidé qu'ils ne voulaient pas changer Python 2. Je J'ai résolu ce problème dans Python 3, mais ils n'ont jamais accepté mon correctif dans Python 2. La solution consiste à utiliser .encode ('utf-8') en premier, puis à utiliser urllib.quote. Mais c'est pour l'encodage d'URL qui n'est pas la manière standard de les mettre dans les en-têtes. – mgiuca