Найти - Пользователи
Полная версия: Вернуть страницу с кодировкой отличной от стандартной для проекта [РЕШЕНО]
Начало » Django » Вернуть страницу с кодировкой отличной от стандартной для проекта [РЕШЕНО]
1 2
JOHN_16
Приветствую!
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
Переформирую вопрос несколько в ином свете:
Возможно ли вывести на страницу текст в разных кодировках (весь текст в UTF-8 а например текст в каком нибудь блоке div в кодировке cp1251) ?
P.S. пишу уже от безысходности любые варианты
Piton23
Да можно. Сам шаблон (файл) в какой кодировке у вас?

И в представлении вначале что прописано? какая кодировка

Попробуй так в словаре контекста
'value':'это_проверка'.encode('cp1251')
или
'value':u'это_проверка'.decode('utf-8').encode('cp1251')
JOHN_16
Я в первом сообщение написал про кодировки - все и везде где только можно в utf-8 кодировано и указано

В обоих случаях вылазит UnicodeDecodeError
FishHook
>>>и понадобилось мне на определенный запрос возвращать страницу в cp125
А зачем понадобилось то, можно узнать?
JOHN_16
FishHook
Проблема , в самом изначальном истоке, в отображении читабельных ссылок FTP сервера.
Например: есть ftp сервер, в нем лежат 2 файла файл1 и файл2, оба в названии имеют кириллицу т.е. называются по русски, у первого имя кодировано в UTF-8, у второго в cp1251. Если оба этих имени файла перевести в UTF-8 и сделать из них ссылки вида ftp://someserver.ru/файл1, то первый файл скачается, а второй нет и ошибка будет в том тчо сервер ответит о отсутствии такого файла. Все дело в массиве байт, коим являются строки. То есть строка файл2 в cp1251 и перекодированная в utf-8 это разные массивы байт - поэтому ftp сервер не находит такой файл.

Поэтому я и озадачился тем что бы для ссылок в cp1251 сделать другой вывод - вывод новой страницы, тогда и ссылка валидная будет и читабельная получится. Я не говорю о конкретной реализации в плане html или тп - это не столь важно перед вопросом о технической возможности вообще.

ух…как то так..не знаю понятно ли объяснил
Piton23
Ну кодировки указаны. По мне так: есть файл в соотв. кодировке (можно посмотреть через notepad++) и в начале скрипта указывают что то типа # -*- coding: utf-8 -*- или # -*- coding: cp1251 -*- (в представлении)

Если ты спрашиваешь можно ли в одном файле текст из разных кодировок, вот пример Файлообменник: test2.html
JOHN_16
Piton23
Нет, не было такого вопроса. Сделать файл хоть в 3 кодировках=) ничего сложного.

Вопрос что бы Django возвращал подобное. Например есть шаблон, кодированный в UTF-8, есть функция представления которая в шаблон вставляет 2 строки в разных кодировках (utf-8 и cp1251). Проблема в том что в итоге строка в cp1251 не уйдет в шаблон.
Piton23
Странно раньше в одном скрипте (без джанго тупо на питоне) экспортировал в файл строки с разными кодировками путем encode(). Думал на джанге проблем не возникнет, но он спотыкается при encode('cp1251'). На днях посмотрю в нете, мб кто-нить другой подскажет быстрее.
JOHN_16
В Джанго возникает проблема из за того что внутри себя она приводит все объекты в Unicode, включая отрендеренный шаблон, и делает она наверняка что то типа unicode(x , settings.DEFAULT_CHARSET, ‘ignore’) поэтому в шаблон уходят пустые строки
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB