【问题标题】:Django storage exists fails on non-ascii charactersDjango 存储在非 ascii 字符上存在失败
【发布时间】:2016-06-13 18:37:23
【问题描述】:

我在静态文件夹中有一个名为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)',)

【问题讨论】:

    标签: python django django-storage


    【解决方案1】:

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

    # coding=utf-8
    

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

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

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

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

    # coding=<encoding name>
    

    【讨论】:

    • 默认情况下,当我从 mongo 获取路径时,我得到 path=u'/static/Foo-Bar-Bar\xf6Foo.pdf' 当我调用 exists() 时它会失败。路径中不是\xf6
    • 似乎 \xf6 正在替换为您文件名中的特殊字符/符号,例如 Bar\xfsFoo
    • @NiviD 是的,确实如此,它与SuspiciousFileOperation 出错
    • 你能看看它何时何地被替换吗?
    猜你喜欢
    • 2018-04-08
    • 2012-01-02
    • 1970-01-01
    • 2010-12-06
    • 2011-06-05
    • 2011-04-20
    • 2014-05-29
    • 2013-12-22
    • 1970-01-01
    相关资源
    最近更新 更多