1. Imbolc

    20.11.2008 17:20

    Страничка в utf-8, но поля формы нужно заполнить в win. При попытке передать в шаблон win-строку, Джанга заменяет её пустой.

    Как быть? Есть ли варианты, кроме отказа от Джанга-шаблонов?
  2. Иван Сагалаев

    20.11.2008 18:11

    Страничка в utf-8, но поля формы нужно заполнить в win

    Поясни, как это? Если браузер выдает страницу в utf-8, то он и результат при сабмите формы передаст на сервер в utf-8.

    Шаблоны, кстати, можно держать в любой кодировке...

  3. Imbolc

    20.11.2008 18:32

    Нужно настроить приём платежей через Merchant Webmoney. Они принимают post-запрос в win кодировке. Если описание платежа по русски и послать его, например в utf-8, в процессе платежа оно отобразится иероглифами.

    Чтобы не возникло путанницы ещё раз: иероглифы получаются в формах генерируемых wm в процессе платежа: https://merchant.webmoney.ru/lmi/payment.asp

    Сам сайт в utf-8 включая страничку герерации формы. Поле с описанием на этой страничке скрытое, в него пытаюсь положить {'desc':desc.decode('utf-8').encode('windows-1251')}.
    Ложится пустая строка.
  4. Иван Сагалаев

    20.11.2008 18:54

    Правильно ли я понимаю, что ты отображаешь некую форму, которая потом сабмитится не обратно в твое приложение, а в WM?

    Если так, то достаточно наверное просто выводить страницу с формой в windows-1251:

    content = render_to_string('form.html', {...})
    return HttpResponse(content, mimetype='text/html; charset=windows-1251')
    

    Поле с описанием на этой страничке скрытое, в него пытаюсь положить {'desc':desc.decode('utf-8').encode('windows-1251')}.

    Шаблонная система вообще про кодировки ничего не знает, работает в юникоде. Конвертация в конкретную байтовую кодировку уже при выводе в response делается.

  5. Imbolc

    20.11.2008 20:08

    > ты отображаешь некую форму, которая потом сабмитится не обратно в твое приложение, а в WM?

    Всё верно. Но, так и не срослось, к сожалению. Mimetype, похоже, просто заголовок меняет.

    Т.е. если шаблон в utf-8, всё иероглифами отображается.
    Если шаблон в win, вываливается: 'utf8' codec can't decode bytes in position 49-50: invalid data.
  6. shiberz

    20.11.2008 21:32

    енкодить надо не переменную перед рендерингом шаблона, а результат
    content = render_to_string('form.html', {'desc':desc}).encode('windows-1251')
    return HttpResponse(content, mimetype='text/html; charset=windows-1251')

    будет на юникодном сайте одна страница в cp-1251
  7. Иван Сагалаев

    20.11.2008 21:57

    Да, shiberz правильно написал. Надо действительно вручную заенкодить весь отрендеренный шаблон.

    И еще раз — кодировка шаблонного файла никак не связана с тем, как это все будет выводиться в браузер.

  8. Imbolc

    20.11.2008 22:54

    То, что нужно. Большое спасибо :)
  9. Imbolc

    21.11.2008 17:01

    Продолжение следует... теперь нужно принять ответ от WM :))

    Т.е. приходит пост-запрос в win кодировке на сайт в utf-8. В request.POST пустой словарь. Есть ли тут законные решения?
  10. Иван Сагалаев

    21.11.2008 17:05

    Да. Специально для таких случаев можно явно указать кодировку запроса.

  11. Imbolc

    21.11.2008 18:57

    Работает, спасибище :)

bbcode