gpt4 book ai didi

python - 使用 unicode 文件名上传文件

转载 作者:行者123 更新时间:2023-11-28 16:48:48 26 4
gpt4 key购买 nike

我有一个带有 unicode 名称的文件(例如中文字符)。我得到一个 UnicodeEncodeError。我在 ubuntu lucid 64 上使用带有 utf8 的 postgres 数据库和 django 开发服务器。我错过了什么?我执行以下操作,其中文件名是 models.py 中文件的 unicode 名称:

def get_upload_path(instance,filename):
return filename # Unicode error if filename has non latin 1 characters

class Kind (models.Model):
style = models.ForeignKey(Style)
kind_file = models.FileField(upload_to=get_upload_path)

来自外壳:

enter image description here

最佳答案

我认为问题在于您的字符串格式。在python2中,它会自动在str类型(这是一系列字节)和unicode类型之间进行转换,unicode代表unicode代码点的抽象系列。

我假设您的 filenameunicode 类型。

"tmp/%s/%s" 是一个字节串,所以 python 会尝试自动编码你的 unicodestr 来匹配。问题是它使用 ascii 编码来执行此操作,无法保存您的数据。

return 语句更改为使用 temp2 而不是 filename 应该可行,因为现在您正在一起使用正确的类型。


对于 future ,我还建议您观看我在评论中链接到的演示文稿,因为它提供了几种避免此类问题的策略。最主要的是你应该只在程序外发送数据时使用字节。一旦您从外界接收到字节,就将它们解码 为 unicode,并且只有在您将数据发送出程序时才编码。您还应该在内部使用 unicode 字符串文字(u"" 而不是 "")。

我还会推荐比 tempN 更有意义的变量名。

关于python - 使用 unicode 文件名上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10694277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com