2024-09-30 08:15:24 发布
网友
我有以下使用Genshi(简化)的Python代码:
with open(pathToHTMLFile, 'r') as f: template = MarkupTemplate(f.read()) finalPage = template.generate().render('html', doctype = 'html')
源HTML文件包含©、™和{}等实体。Genshi将其替换为UTF-8字符,这会导致查看器出现问题(输出作为独立文件使用,而不是对web请求的响应),最终查看结果HTML。有没有办法阻止Genshi解析这些实体?像&这样的更常见的方法可以很好地通过。在
©
™
&
实际上,&并没有被传递,而是被解析为一个与号字符,然后在退出时序列化回&,因为这是在HTML中表示文本与号所必需的。^另一方面,{}不是必需的转义符,因此可以将其保留为其字面字符。在
所以不,没有办法停止正在解析的实体引用。但您可以通过序列化为纯ASCII来确保在返回时重新转义非ASCII字符:
template.generate().render('html', doctype= 'html', encoding= 'us-ascii')
您仍然无法在输出中获得实体引用©,但是您将得到字符引用©,这是等价的,希望显示最终文件的任何内容都能理解它。在
©
粘着
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
在HTML的<head>中,应该会导致浏览器正确呈现UTF-8。在
<head>
为了澄清,根本问题是相应的©UTF-8字符不能在静态HTML中正确呈现。将meta标记放在HTML中告诉浏览器如何正确地解释字符集,从而正确地呈现UTF-8字符。在
要防止Genshi中的(x)html标记字符转义,请执行以下操作:
from genshi.core import Markup ... newstring = Markup(oldstring) ... <now apply templates as before, but substituting newstring for oldstring>
实际上,}不是必需的转义符,因此可以将其保留为其字面字符。在
&
并没有被传递,而是被解析为一个与号字符,然后在退出时序列化回&
,因为这是在HTML中表示文本与号所必需的。^另一方面,{所以不,没有办法停止正在解析的实体引用。但您可以通过序列化为纯ASCII来确保在返回时重新转义非ASCII字符:
您仍然无法在输出中获得实体引用
©
,但是您将得到字符引用©
,这是等价的,希望显示最终文件的任何内容都能理解它。在粘着
在HTML的
<head>
中,应该会导致浏览器正确呈现UTF-8。在为了澄清,根本问题是相应的©UTF-8字符不能在静态HTML中正确呈现。将meta标记放在HTML中告诉浏览器如何正确地解释字符集,从而正确地呈现UTF-8字符。在
要防止Genshi中的(x)html标记字符转义,请执行以下操作:
相关问题 更多 >
编程相关推荐