2010-06-12 8 views
0

일부 스타일 시트로 출력을 변환해야하는 필터 작업 중입니다. 코드의 중요한 부분은 다음과 같습니다.javaxxslt transformer가 utf-8을 사용하고 html 엔티티를 사용하지 않고 국가 별 문자를 강제로 인코딩하도록하려면 어떻게해야합니까?

PrintWriter out = response.getWriter(); 
... 
StringReader sr = new StringReader(content); 
Source xmlSource = new StreamSource(sr, requestSystemId); 
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 
transformer.setParameter("encoding", "UTF-8"); 
//same result when using ByteArrayOutputStream xo = new java.io.ByteArrayOutputStream(); 
StringWriter xo = new StringWriter(); 
StreamResult result = new StreamResult(xo); 
transformer.transform(xmlSource, result); 
out.write(xo.toString()); 

문제는 국가 별 문자가 UTF를 사용하는 것이 아니라 HTML 엔터티로 인코딩된다는 것입니다. 변압기가 엔티티 대신 UTF-8을 사용하도록 강제하는 방법이 있습니까?

답변

1

(기본값) xml 대신 출력 방법을 text으로 설정해야합니다.

response.setCharacterEncoding("UTF-8"); 

을 그리고 같은 인코딩을 사용하는 웹 브라우저 지시 :

transformer.setOutputProperty(OutputKeys.METHOD, "text"); 

당신은 그러나 또한 사전에 응답 인코딩을 설정해야합니다

response.setContentType("text/html;charset=UTF-8"); 
+0

"텍스트"또는 "XML"방법을 알 수없는 생산을 브라우저에서 (물음표)로 표시되는 엔티티 대신 문자. 이 물음표는 브라우저에서 선택한 페이지 인코딩에 대해 올바르게 해석되지 않습니다. 이상한. –

+0

그런 다음 응답 인코딩과 HTTP 'Content-Type'을 설정하여 'UTF-8'과 같은 문자 인코딩을 사용해야합니다. 첫 번째는 원하는 인코딩으로 문자를 쓰고 두 번째는 인코딩 할 웹 브라우저에게 지시합니다. 또한 [유니 코드 - 문자를 얻는 방법?] (http://balusc.blogspot.com/2009/05/unicode-how-to-get-characters-right.html)을 참조하십시오. – BalusC

+0

내가 코멘트에 썼던 것처럼, 나는 물음표가 내가 선택한 인코딩과 정확히 독립적으로 해석되지 않는다. 물론 UTF-8과 다른 국가 별 1 바이트 인코딩을 시도했습니다. 확실히 UTF가 아닙니다. 그래서 내가 이상하게 썼다. 변압기가 utf를 가능한 한 많이 피하려고 노력하고있는 것처럼 보입니다. 따라서 변압기는 utf를 해당 국가 문자를 작성하기 위해 애매한 1 바이트 인코딩으로 선택했습니다. –