2009-10-28 16 views
13

जावा org.w3c.dom.ls के लिए प्रलेखन पढ़ना ऐसा लगता है कि एलिमेंट को केवल जावा मूल स्ट्रिंग एन्कोडिंग, यूटीएफ -16 के साथ स्ट्रिंग में क्रमबद्ध किया जा सकता है। हालांकि मुझे यूटीएफ -8 स्ट्रिंग बनाने, बचने या क्या नहीं, मुझे समझ में आता है कि यह अभी भी एक यूटीएफ -16 स्ट्रिंग होगा। किसी को भी इस बारे में जानने का विचार है? मुझे एक उत्पन्न डब्ल्यूएस क्लाइंट में जाने के लिए स्ट्रिंग की आवश्यकता है जो स्ट्रिंग का उपभोग करेगी, फिर यह यूटीएफ -8 होना चाहिए।जावा में UTF-8 में स्ट्रिंग को क्रमबद्ध करने के लिए DOMImplementationLS क्रमबद्ध करें

कोड मैं स्ट्रिंग बनाने के लिए उपयोग:

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

@Tomas - वहाँ एक UTF-8 जावा स्ट्रिंग जैसी कोई चीज नहीं है। मैं उम्मीद करता हूं कि यूटीएफ -8 एन्कोडेड बाइट्स को चार प्रकार में आँसू में खत्म करने के लिए मजबूर करने का कोई प्रयास होगा। – McDowell

उत्तर

7

मुझे लगता है कि स्ट्रिंग के लिए एक डोम serializing के सबसे लचीला तरीका javax.xml.transform एपीआई का उपयोग करने के लिए है:

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

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

    String xml = output.toString(); 

यह विशेष रूप से नहीं है सुरुचिपूर्ण, लेकिन यह आपको आउटपुट एन्कोडिंग पर बेहतर नियंत्रण देना चाहिए।

+0

एक आकर्षण के रूप में काम करता है, लेकिन मैं एन्कोडिंग को स्पष्ट कैसे सेट करूं, इससे यूटीएफ -8 उत्पन्न नहीं होता है? – Tomas

+0

यह आपके द्वारा उपयोग किए जाने वाले 'राइटर' कार्यान्वयन पर निर्भर है। मुझे लगता है कि 'स्ट्रिंगवाइटर' डिफ़ॉल्ट रूप से यूटीएफ -8 के लिए होता है। – skaffman

+1

@ स्काफमैन - "स्ट्रिंगवाइटर बस यूटीएफ -8 के लिए डिफ़ॉल्ट रूप से होता है"। आप गलत कर रहे हैं। स्ट्रिंग यूटीएफ -16 है; ट्रांसफार्मर एक एक्सएमएल हेडर जोड़ सकता है जो ' ', लेकिन इसका कोई वास्तविक एन्कोडिंग ऑपरेशन करने के लिए कुछ भी नहीं है। – 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(); 
संबंधित मुद्दे