Я извлекаю данные из 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, чтобы разрешить существование таких вещей, как фигурные кавычки.