Django存储在非ascii字符上存在失败

时间:2016-03-01 11:09:52

标签: python django django-storage

我在静态文件夹中有一个名为Foo-Bar-BaröFoo.pdf的静态文件。 当我在浏览器中查看名为/static/Foo-Bar-BaröFoo.pdf的文件时,它呈现正常。

但这是一个场景,我需要查看该文件是否存在/存在。 我正在使用django存储来检查该文件。

path=u'Foo-Bar-BaröFoo.pdf'
storage.exists(path)

失败了。

UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 40: ordinal not in range(128)

可以解决这个问题的方法是什么?也许一些编码/解码?

已经尝试

path = path.encode('utf-8')

异常:

SuspiciousFileOperation: Suspicio...8f3f6)',)

1 个答案:

答案 0 :(得分:0)

您必须在脚本顶部使用以下编码标识符,并且应该以UTF-8格式保存文件:

# coding=utf-8

如果您使用的是Python 2.x,则还必须使用u前缀:

path = u'Foo-Bar-BaröFoo.pdf'

PEP-0263详细解释了这一点:

  

要定义源代码编码,必须使用魔术注释       作为第一个或第二个放入源文件       文件中的行,例如:

# coding=<encoding name>