Nano Hash - криптовалюты, майнинг, программирование

Как визуализировать специальные символы в шаблонах jinja с помощью flask

Я извлекаю данные из API как JSON в Flask и пытаюсь отобразить их в шаблоне Jinja как RSS, но символы из JSON, такие как апострофы и тире, отображаются как ’ и — в шаблоне.

Как убедиться, что шаблон отображает правильные символы?

Это мой код в колбе:

json_resp = resp.json()
posts = json_resp['list']
template = render_template('recs.rss',posts=posts)
response = make_response(template)
response.headers.set('Content-Type', 'application/rss+xml')
return response

а это шаблон recs.rss:

<?xml version="1.0"?>
<rss version="2.0">
   <channel>
      ...
      {% for post in posts %}
      <item>
        {% if post.title %}<title><![CDATA[{{ post.title }}]]></title>{% endif %}
        ...
      </item>
      {% endfor %}
   </channel>
</rss>

Если я закодирую его как utf-8:

post_item['title'] = post_item['title'].encode('utf-8'

Я получаю кодировку utf-8 в RSS-канале, и, кажется, перед ней стоит b вместо u:

b'The Dirty Secret of \xe2\x80\x98Secret Family Recipes\xe2\x80\x99'

Если я попытаюсь декодировать с помощью utf-8, как это предлагается в комментарии ниже и в этом сообщении:

Python Selenium().text возвращает ’ вместо апострофа (')

Я получаю сообщение об ошибке:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x91 in position 20: invalid start byte

Мне интересно, есть ли способ исправить это с помощью заголовков, которые я отправляю в шаблон jinja, или что-то, что можно поместить в сам шаблон Jinja, чтобы разрешить существование таких вещей, как фигурные кавычки.

02.04.2021

  • Отвечает ли это на ваш вопрос? Python Selenium().text возвращает ’ вместо апострофа (') 03.04.2021
  • @MichaelRuth - не совсем. Я знаю, что здесь есть проблема с кодировкой - я добавил больше пояснений к вопросу. 05.04.2021
  • Вы пытались явно установить кодировку для XML с помощью <?xml version="1.0" encoding="UTF-8" ?>? Вы пытались установить кодировку в заголовке Content-Type с помощью application/rss+xml; charset=utf-8? 06.04.2021
  • @KarlSutt - заголовок типа контента был недостающим элементом! (У меня была кодировка в теге xml, но она не работала). Не стесняйтесь писать это как ответ, и я приму. 06.04.2021
  • Хороший материал — рад, что у вас все получилось! Я добавил ответ. 06.04.2021

Ответы:


1

Вы должны указать кодировку тела ответа в заголовке Content-Type с application/rss+xml; charset=utf-8.

06.04.2021
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..