àéãなどの非アスキー文字を必要とするDjangoプロジェクトを行っています。これまでのところ、このエンコーディングをうまく操作できましたが、パス名に問題がありますアップロードされたファイルのupload_toは、非ASCII文字を持つことができるフィールドである(都市フィールドに基づいて、ファイルを保存するためのパスを作成する関数を呼び出しますDjangoでパス名のエンコーディングに問題があります
class Property (models.Model):
#...
city = models.CharField(max_length = 100, choices = CITIES_LIST)
pdf_file = models.FileField(upload_to = generateUploadPath)
:
私は、このように読み込むモデルを持っています):
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 \ストレージ\プロパティ\ブラジャー\ 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がインポートされています。
その質問には、パス名に前方と後方スラッシュで問題に関するだった - 鉱山はエンコーディングについてです。異なるトピック。 –