Форум сайта python.su
Приветствую!
OpenSUSE linux 12.1, python 2.7.2, Django 1.2.5
Суть проблемы такова: есть проект все в котором работает через UTF-8 ( в settings.py явно не прописано,но известно точно что стандартная кодировка , все .py файлы и шаблоны) и понадобилось мне на определенный запрос возвращать страницу в cp1251.
В итоге в шаблон уходит пустая строка (предполагаю что происходит UnicodeError так как Джанга в итоге все конвертирует в unicode ). Пробовал сам, гуглил, смотрел в потолок, идеи кончились. Тупик.
Прошу помощи! У кого какие идеи есть?
=====РЕШЕНО=====
Предполагается что все шаблоны кодированы в UTF-8. Дополнительно импортируем:
from django.utils.encoding import force_unicode
import codecs
Пример шаблона:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset={{charset}}">
</head>
<body>
{{value}}
</body>
</html>
def test(request)
c={'charset':u'windows-1251', 'value':u'это_проверка'}
f=codecs.open(root_dir+u'templates/test.html', 'r' , 'utf-8')
t=Template(f.read())
f.close()
html=t.render(Context(c))
response=HttpResponse(html)
response['Content-Type']='text/html; charset=%s'%'windows-1251'
response.content=force_unicode(response.content).encode('cp1251')
return response
Отредактировано JOHN_16 (Март 25, 2012 22:59:04)
Офлайн
Переформирую вопрос несколько в ином свете:
Возможно ли вывести на страницу текст в разных кодировках (весь текст в UTF-8 а например текст в каком нибудь блоке div в кодировке cp1251) ?
P.S. пишу уже от безысходности любые варианты
Офлайн
Да можно. Сам шаблон (файл) в какой кодировке у вас?
И в представлении вначале что прописано? какая кодировка
Попробуй так в словаре контекста
'value':'это_проверка'.encode('cp1251')
или
'value':u'это_проверка'.decode('utf-8').encode('cp1251')
Офлайн
Я в первом сообщение написал про кодировки - все и везде где только можно в utf-8 кодировано и указано
В обоих случаях вылазит UnicodeDecodeError
Офлайн
>>>и понадобилось мне на определенный запрос возвращать страницу в cp125
А зачем понадобилось то, можно узнать?
Офлайн
FishHook
Проблема , в самом изначальном истоке, в отображении читабельных ссылок FTP сервера.
Например: есть ftp сервер, в нем лежат 2 файла файл1 и файл2, оба в названии имеют кириллицу т.е. называются по русски, у первого имя кодировано в UTF-8, у второго в cp1251. Если оба этих имени файла перевести в UTF-8 и сделать из них ссылки вида ftp://someserver.ru/файл1, то первый файл скачается, а второй нет и ошибка будет в том тчо сервер ответит о отсутствии такого файла. Все дело в массиве байт, коим являются строки. То есть строка файл2 в cp1251 и перекодированная в utf-8 это разные массивы байт - поэтому ftp сервер не находит такой файл.
Поэтому я и озадачился тем что бы для ссылок в cp1251 сделать другой вывод - вывод новой страницы, тогда и ссылка валидная будет и читабельная получится. Я не говорю о конкретной реализации в плане html или тп - это не столь важно перед вопросом о технической возможности вообще.
ух…как то так..не знаю понятно ли объяснил
Отредактировано (Март 22, 2012 00:38:15)
Офлайн
Ну кодировки указаны. По мне так: есть файл в соотв. кодировке (можно посмотреть через notepad++) и в начале скрипта указывают что то типа # -*- coding: utf-8 -*- или # -*- coding: cp1251 -*- (в представлении)
Если ты спрашиваешь можно ли в одном файле текст из разных кодировок, вот пример Файлообменник: test2.html
Офлайн
Piton23
Нет, не было такого вопроса. Сделать файл хоть в 3 кодировках=) ничего сложного.
Вопрос что бы Django возвращал подобное. Например есть шаблон, кодированный в UTF-8, есть функция представления которая в шаблон вставляет 2 строки в разных кодировках (utf-8 и cp1251). Проблема в том что в итоге строка в cp1251 не уйдет в шаблон.
Офлайн
Странно раньше в одном скрипте (без джанго тупо на питоне) экспортировал в файл строки с разными кодировками путем encode(). Думал на джанге проблем не возникнет, но он спотыкается при encode('cp1251'). На днях посмотрю в нете, мб кто-нить другой подскажет быстрее.
Офлайн
В Джанго возникает проблема из за того что внутри себя она приводит все объекты в Unicode, включая отрендеренный шаблон, и делает она наверняка что то типа unicode(x , settings.DEFAULT_CHARSET, ‘ignore’) поэтому в шаблон уходят пустые строки
Отредактировано (Март 22, 2012 14:04:52)
Офлайн