Я делаю проект Django, который ожидает символов не-ascii, таких как àéã и т. Д. До сих пор я мог хорошо ориентироваться в этом кодировании, но у меня проблемы с именами путей загруженных файлов.Проблемы с кодировкой Django с именем пути
У меня есть модель, которая читает таким образом:
class Property (models.Model):
#...
city = models.CharField(max_length = 100, choices = CITIES_LIST)
pdf_file = models.FileField(upload_to = generateUploadPath)
upload_to вызывает функцию, которая создает путь для сохранения файла, основанный на поле города (это поле, которое может иметь не-ASCII символы):
def generateUploadPath (instance, file):
city = instance.city
storage_path = r'Property\{city}\{file}'.format(city = city, file = file)
return storage_path
Это хорошо работает. Папки создаются, если они не существуют, с правильными именами, и файлы хранятся там правильно. Проблема заключается в том, у меня есть сигнал post_save, который считывает сказал файл и обрабатывает его определенным образом:
@receiver(signals.post_save, sender = Property)
def fileProcessing (sender, instance, created, **kwargs):
file_path = instance.pdf_file.path
pdf_file = open(file_path, 'r')
Вот где код брейки. Если это делается, при запуске формы появляется следующая ошибка: UnicodeEncodeError: кодек 'ascii' не может кодировать символ u '\ xe1' в позиции 7: порядковый номер не в диапазоне (128). Если я, вместо того, заставлять кодировку с:
file_path = instance.pdf_file.path.encode('utf-8')
Я получаю следующее сообщение об ошибке: IOError: [Errno 2] Нет такого файла или каталога: «C: \ Django_project \ Storage \ Недвижимость \ Бюстгальтеры \ xc3 \ xadlia \ test_file.pdf ', хотя папка правильно создана в Windows как «.. \ Property \ Brasília \».
Весь проект находится в UTF-8, я использую Python 2.7.11, Django 1.9.4, db - Postgres 9.5, а кодировка базы данных также установлена в UTF-8. Мой models.py имеет # - * - код: utf-8 - * - сверху, с импортированными unicode_literals.
Этот вопрос был по поводу проблемы с прямыми и обратными косыми чертами в именах путей - мина о кодировании. Разные темы. –