2009-10-28 4 views
13

Java org.w3c.dom.ls의 설명서를 읽는 것만 큼 요소가 Java 기본 문자열 인코딩 인 UTF-16로 String에 직렬화 될 수 있습니다. 그러나 UTF-8 문자열을 생성하려면 이스케이프 처리를해야합니다. 그렇지 않으면 UTF-16 문자열이 될 것입니다. 누구든지이 문제를 해결할 생각이 있습니까? 문자열을 소비하는 생성 된 WS 클라이언트에 전달할 문자열이 필요합니다. 그런 다음 UTF-8이어야합니다.DOMImplementationLS는 Java에서 UTF-8로 문자열로 serialize합니다.

내가 문자열을 만드는 데 사용하는 코드는 :

Node node = ... 
    StringWriter output = new StringWriter(); 

    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    transformer.transform(new DOMSource(node), new StreamResult(output)); 

    String xml = output.toString(); 

그것은 특히 아니다 :

DOMImplementationRegistry domImplementationRegistry = DOMImplementationRegistry. 
DOMImplementationLS domImplementationLS = (DOMImplementationLS) REGISTRY.getDOMImplementation("LS"); 
LSSerializer writer = domImplementationLS.createLSSerializer(); 
String result = writer.writeToString(element); 
+1

@Tomas - 수정 UTF-8 자바 문자열과 같은 것은 존재하지 않는다. UTF-8로 인코딩 된 바이트를 문자 형식으로 강요하여 눈물을 흘리려는 시도가있을 것으로 예상됩니다. – McDowell

답변

7

나는 문자열에 DOM을 직렬화의 가장 유연한 방법은 javax.xml.transform API를 사용하는 것을 발견 우아하지만 출력 인코딩을보다 잘 제어 할 수 있어야합니다.

+0

은 매력으로 작동하지만 인코딩을 명시 적으로 설정하면 구성이없는 UTF-8이 생성됩니까? – Tomas

+0

당신이 사용하는'Writer' 구현에 달려 있습니다. 'StringWriter'는 UTF-8로 기본 설정됩니다. – skaffman

+1

@skaffman - "StringWriter가 UTF-8로 기본 설정됩니다." 당신은 착각했습니다. String는 UTF-16입니다. 트랜스포머는''이라고하는 XML 헤더를 추가 할 수 있지만 실제 인코딩 작업과는 아무런 관련이 없습니다. – McDowell

13

당신은 여전히 ​​DOMImplementationLS를 사용할 수 있습니다

DOMImplementationRegistry domImplementationRegistry = DOMImplementationRegistry. 
DOMImplementationLS domImplementationLS = (DOMImplementationLS)REGISTRY.getDOMImplementation("LS"); 
LSOutput lsOutput = domImplementationLS.createLSOutput(); 
lsOutput.setEncoding("UTF-8"); 
Writer stringWriter = new StringWriter(); 
lsOutput.setCharacterStream(stringWriter); 
lsSerializer.write(doc, lsOutput);  
String result = stringWriter.toString(); 
관련 문제