gpt4 book ai didi

python - Django:带有 ASCII header 的 Unicode 文件名?

转载 作者:太空宇宙 更新时间:2023-11-03 13:24:28 25 4
gpt4 key购买 nike

我有一个奇怪编码文件的列表:02 - Charlie, Woody and You/Study #22.mp3 我想这还不错,但有一些特殊字符 Django 或nginx 似乎正在发展。

>>> test = u'02 - Charlie, Woody and You/Study #22.mp3'
>>> test
u'02 - Charlie, Woody and You\uff0fStudy #22.mp3'

我使用 nginx 作为反向代理来连接到 django 的内置网络服务器(仍处于开发阶段)和我的数据库的 postgresql。我的数据库和表都是 en_US.UTF-8 并且我正在使用 pgadmin3 在 django 之外查看我的表。我的问题有点超出我的标题,首先我应该如何在我的数据库中保存可能古怪的文件名?我现在的方法是

'path': smart_unicode(path.lstrip(MUSIC_PATH)),
'filename': smart_unicode(file)

当我打印出值时,它们会显示 u'whateverthecrap'

我不确定我是否应该这样做,但假设现在是这样,我在尝试吐出下载时遇到了问题。

我的下载 View 看起来像这样:

def song_download(request, song_id):
song = get_object_or_404(Song, pk=song_id)
url = u'/static_music/%s/%s' % (song.path, song.filename)

print url

response = HttpResponse()
response['X-Accel-Redirect'] = url
response['Content-Type'] = 'audio/mpeg'
response['Content-Disposition'] = "attachment; filename=test.mp3"

return response

大多数文件都会下载,但是当我到达 02 - Charlie, Woody and You/Study #22.mp3 我从 django 收到这个:'ascii' codec can't encode字符 u'\uff0f' in position 118: ordinal not in range(128), HTTP response headers must be in US-ASCII format.

如果我的文件名超出范围,我如何使用 ASCII 可接受的字符串? 02 - 查理、伍迪和你\uff0fStudy #22.mp3 似乎不起作用...

编辑 1

我正在为我的操作系统使用 Ubuntu。

最佳答案

虽然 是一个不常见且不受欢迎的字符,但您的脚本将因 任何 非 ASCII 字符而中断。

response['X-Accel-Redirect'] = url

url 是 Unicode(它不是 URL,而是文件路径)。响应头是字节。您需要对其进行编码。

response['X-Accel-Redirect'] = url.encode('utf-8')

假设您在使用 UTF-8 作为文件系统编码的服务器上运行。

(现在,如何在 Content-Disposition header 中对文件名进行编码……这是一个更棘手的问题!)

关于python - Django:带有 ASCII header 的 Unicode 文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2732268/

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