2009-10-12 5 views
3

내가 (간체) Genshi를 사용하여 다음 파이썬 코드가 있습니다Genshi가 HTML 엔터티를 구문 분석하지 못하게 할 수 있습니까?

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

소스 HTML 파일은 ©, ™® 등의 요소를 포함합니다. Genshi는 이들을 UTF-8 문자로 바꿉니다. 결과적으로 결과 HTML을 보는 뷰어에 문제가 발생합니다 (출력은 독립 실행 형 파일로 사용되며 웹 요청에 대한 응답이 아닙니다). Genshi가이 엔티티들을 파싱하는 것을 막을 수있는 방법이 있습니까? &과 같은 일반적인 것들은 잘 통과합니다.

답변

9

실제로는 &은 전달되지 않고 앰퍼샌드 문자로 구문 분석 된 후 문자 그대로 앰퍼샌드를 HTML로 나타내려면 출입문에서 &으로 다시 직렬화됩니다. 반면에 은 필수 이스케이프가 아니므로 리터럴 문자로 남겨 둘 수 있습니다.

그래서, 아니오 개체 참조를 구문 분석 할 수있는 방법이 없습니다. 하지만 당신은 다시 밖으로 일반 ASCII에 serialising에 의해 비 ASCII 문자가 길에 다시 탈출되도록 할 수 있습니다 :

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

당신은 여전히 ​​출력의 엔티티 참조 ©을받지 않습니다,하지만 당신은 얻을 것이다 문자 참조 ©은 동등하며 최종 파일을 표시하는 모든 항목에서 잘 이해해야합니다.

3

당신의 HTML의 <head>에서

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

을 고집하는 것은 브라우저가 제대로 UTF-8 렌더링하게한다.

명확히하기 위해 근본적인 문제는 해당 © UTF-8 문자가 정적 HTML에서 올바르게 렌더링되지 않는다는 것입니다. 메타 태그를 HTML에 배치하면 브라우저가 문자 세트를 올바르게 해석하여 UTF-8 문자를 올바르게 렌더링하는 방법을 알려줍니다.

0

는 Genshi에서 (X) HTML 마크 업 문자 이스케이프 방지하기위한 방법은 다음과 같습니다

from genshi.core import Markup 
... 
newstring = Markup(oldstring) 
... 
<now apply templates as before, but substituting newstring for oldstring>