我有一份奇怪编码的文件列表: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内置的Web服务器(仍处于开发阶段),并使用postgresql作为我的数据库。我的数据库和表都是en_US.UTF-8
,我使用pgadmin3在django之外查看我的表。我的问题略微超出了我的标题,首先我应该如何在我的数据库中保存可能有点奇怪的文件名? 我目前的方法是
'path': smart_unicode(path.lstrip(MUSIC_PATH)),
'filename': smart_unicode(file)
当我打印出这些值时,它们确实显示为u'whateverthecrap'
我不确定我是否应该这样做,但是假设现在我尝试输出下载文件,遇到了问题。
我的下载视图大致如下:
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 character u'\uff0f' in position 118: ordinal not in range(128), HTTP response headers must be in US-ASCII format
。如果我的文件名超出了界限,我该如何使用可接受ASCII的字符串?
02 - Charlie, Woody and You\uff0fStudy #22.mp3
似乎不起作用...编辑1:
我正在使用Ubuntu操作系统。