Можно ли запретить Genshi анализировать объекты HTML?

StackOverflow https://stackoverflow.com/questions/1555644

  •  20-09-2019
  •  | 
  •  

Вопрос

У меня есть следующий код Python, использующий Genshi (упрощенный):

with open(pathToHTMLFile, 'r') as f:
    template = MarkupTemplate(f.read())
finalPage = template.generate().render('html', doctype = 'html')

Исходный HTML-файл содержит такие объекты, как ©, ™ и ®.Genshi заменяет их символами UTF-8, что вызывает проблемы со средством просмотра (выходные данные используются как отдельный файл, а не как ответ на веб-запрос), который в конечном итоге видит результирующий HTML.Есть ли способ запретить Genshi анализировать эти объекты?Более распространенные из них, такие как & проходят нормально.

Это было полезно?

Решение

На самом деле & не передается, он анализируется в символ амперсанда, а затем сериализуется обратно в & на выходе, потому что это необходимо для представления буквального амперсанда в HTML. ©, с другой стороны, не является обязательным escape-символом, поэтому его можно оставить в качестве его буквального символа.

Так что нет, нет возможности останавливаться анализируемая ссылка на объект.Но вы можете гарантировать, что символы, отличные от ASCII, будут повторно экранированы на обратном пути путем сериализации в простой ASCII:

template.generate().render('html', doctype= 'html', encoding= 'us-ascii')

Вы все равно не получите ссылку на объект © в вашем выводе, но вы получите ссылку на символ © что эквивалентно и, надеюсь, должно быть понято тем, что отображает окончательный файл.

Другие советы

Прилипание

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

в <head> вашего HTML-кода должен заставить браузеры правильно отображать UTF-8.

Чтобы уточнить, основная проблема заключается в том, что соответствующий символ © UTF-8 неправильно отображается в статическом HTML.Размещение метатега в HTML сообщает браузеру, как правильно интерпретировать набор символов и, таким образом, правильно отображать символы UTF-8.

Чтобы предотвратить экранирование символов разметки (x)html в Genshi:

from genshi.core import Markup
...
newstring = Markup(oldstring)
...
<now apply templates as before, but substituting newstring for oldstring>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top