У меня есть список странно закодированных файлов: 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'
Я не уверен, должен ли я так поступать, но, если предположить, что сейчас у меня проблемы с попыткой выложить загрузку.
Мой вид загрузки выглядит примерно так:
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 для своей ОС.