2009-10-28 10 views
13

java org.w3c.dom.ls belgelerinin okunması için UTF-8 içinde String'e serileştirir; bu, bir Öğe olarak yalnızca java yerel dize kodlaması UTF-16 ile bir String'e serileştirilebilir. Ancak, bir UTF-8 dizesi oluşturmak için kaçmam gerekiyor, ya da değil, hala bir UTF-16 dizesi olacağını anlıyorum. Herkes bu konuda bir fikriniz var mı? Dizeyi tüketecek oluşturulan bir WS istemcisine iletilecek dizeye ihtiyacım var, o zaman UTF-8 olmalıdır.DOMImplementationLS, Java

i dize oluşturmak için kullandığınız kod:

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

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

    String xml = output.toString(); 

Özellikle değil:

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

@Tomas - UTF-8 Java dize diye bir şey yoktur. UTF-8 kodlu baytları gözyaşlarıyla sona erdirmek için bir char tipine zorlamak için herhangi bir girişimde bulunmayı beklerim. – McDowell

cevap

7

Ben String bir DOM seri olan en esnek şekilde javax.xml.transform API kullanmak olduğunu bulmak zarif, ama size çıkış kodlaması üzerinde daha iyi kontrol vermelidir.

+0

bir çekicilik olarak çalışır, ancak kodlamayı açık olarak nasıl ayarlayabilirim, bu hiç bir yapılandırmayla UTF-8 oluşturur? – Tomas

+0

Bu, kullandığınız "Yazan" uygulamasına kalmış. 'StringWriter' sadece UTF-8’e varsayılan olarak geliyor, bence. – skaffman

+1

@skaffman - "StringWriter, varsayılan olarak UTF-8 için varsayılan" olur. Yaniliyosun. Dize UTF-16'dır; transformatör, "' yazan bir XML başlığı ekleyebilir, ancak herhangi bir gerçek kodlama işlemiyle hiçbir ilgisi yoktur. – McDowell

13

Hala DOMImplementationLS kullanabilirsiniz:

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();