Ich mache ein Django-Projekt, das nicht-ASCII-Zeichen erwartet, wie Àã, usw. Bisher konnte ich gut navigieren diese Codierung Hölle, aber ich habe Probleme mit Pfadnamen von hochgeladenen Dateien.Django Codierung Probleme mit Pfadname
Ich habe ein Modell, das so lautet:
class Property (models.Model):
#...
city = models.CharField(max_length = 100, choices = CITIES_LIST)
pdf_file = models.FileField(upload_to = generateUploadPath)
Die upload_to eine Funktion aufruft, die den Pfad erstellt die Datei zu speichern, basierend auf dem Stadtfeld (das ist das Feld, die Nicht-ASCII-Zeichen enthält):
def generateUploadPath (instance, file):
city = instance.city
storage_path = r'Property\{city}\{file}'.format(city = city, file = file)
return storage_path
Das funktioniert gut. Die Ordner werden, wenn sie nicht existieren, mit den korrekten Namen erstellt, und die Dateien werden dort korrekt gespeichert. Das Problem ist, ich ein post_save Signal habe, das die Datei liest und verarbeitet sie in einer bestimmten Art und Weise:
@receiver(signals.post_save, sender = Property)
def fileProcessing (sender, instance, created, **kwargs):
file_path = instance.pdf_file.path
pdf_file = open(file_path, 'r')
Hier ist, wo der Code bricht. Wenn das so gemacht wird, erscheint beim Ausführen eines Formulars folgender Fehler: UnicodeEncodeError: 'ascii' Codec kann das Zeichen u '\ xe1' nicht in Position 7 codieren: Ordnungszahl nicht im Bereich (128). Wenn ich stattdessen zwingen, eine Codierung mit:
file_path = instance.pdf_file.path.encode('utf-8')
Ich erhalte die folgende Fehlermeldung: IOError: [Errno 2] Datei oder Verzeichnis: ‚C: \ Django_project \ Storage \ Property \ Bras \ xc3 \ xadlia \ test_file.pdf ', obwohl der Ordner in Windows korrekt als' .. \ Property \ Brasília \ 'erstellt wurde.
Das gesamte Projekt ist in UTF-8, ich benutze Python 2.7.11, Django 1.9.4, db ist Postgres 9.5, mit der Datenbank-Codierung auch auf UTF-8 gesetzt. Meine models.py hat # - * - Codierung: utf-8 - * - auf der Oberseite, mit Unicode_literals importiert.
Diese Frage stellt sich in Bezug auf ein Problem mit Vorwärts- und Rückwärtsschrägstriche in Pfadnamen - Mine ist über Codierung. Andere Themen. –