2013-06-23 1 views
1

XercesC Lib을 사용하여 데이터 직렬화를 만듭니다. 어떻게 UTF-8로 설정할 수 있습니까? 항상 UTF-16으로 생성되며이를 변경하는 방법을 찾을 수 없습니다.XercesC 설정 출력을 UTF-8로

xercesc::DOMImplementation *gRegistry = xercesc::DOMImplementationRegistry::getDOMImplementation(X("Core")); 
xercesc::DOMDocument *doc = gRegistry->createDocument(
     0,      // root element namespace URI. 
     X(oDocumentName.c_str()),  // root element name 
     0);     // document type object (DTD). 
doc->setXmlStandalone(true); 
... prepare the document ... 
serializer = ((xercesc::DOMImplementationLS *)gRegistry)->createLSSerializer(); 
serializer->setNewLine(xercesc::XMLString::transcode("\n")); 

XMLCh *xmlresult = serializer->writeToString(doc); 
char *temp = xercesc::XMLString::transcode(xmlresult); 
std::string result(temp); 

xercesc::XMLString::release(&temp); 
xercesc::XMLString::release(&xmlresult); 
doc->release(); 
serializer->release(); 
getStream() << result.c_str(); 

내가 자바 측면에서 JAXB와 역 직렬화 때, 나는 항상 content is not allowed in prolog을 얻고 지금까지 내가 XML에서 볼 수있는 유일한 차이점입니다. JAXB에서 로컬로 역 직렬화하려고하면 작동합니다. 내 XercesC XML을 가져 가면이 오류가 발생합니다. 메모장에서 XML 플러그인을 사용하여 형식을 지정하려고하면 오류가 있음을 나타내지 만 세부 정보는 알려주지 않습니다.

+0

잘 모르겠습니다 만, 아마 ICU lib로 XercesC를 빌드해야합니다. 트랜스 코더 옵션에 대한 지침은 여기를 참조하십시오. http://xerces.apache.org/xerces-c/build-3.html –

답변

2

DOMLSOutput의 사용법을 확인하십시오. 그러면 원하는 것을 정확하게 얻을 수 있습니다. 나는. (DOMLSSerializer::writeToString을 사용하는 대신) 쓸 DOMLSOutput 개체를 만듭니다.

+0

예, 현재이 문제를 조사하고 있습니다. 이 문서 http://www.ibm.com/developerworks/library/x-serial.html에 따르면 직렬 변환기는 UTF-16 만 수행 할 수 있습니다. 나는'MemBufFormatTarget'을 구현하려고하는데 문서를 어떻게 직렬화하는지 모르겠습니다. – Devolus

+0

'MemBufFormatTarget'을 만들고 DOMLSOutput에 연결하면 DOMNode가 문서의 루트 요소 인 DOMLSOutput 객체에 DOMLSSerializer :: write를 수행합니다. 그런 다음'MemBufFormatTarget :: getRawBuffer'를 호출하고 XMLC 문자열을 얻기 위해'TranscodeFromStr'을 사용합니다. – Robert

+0

감사. 그'TranscodeFromStr'는 빠진 비트입니다. 이제 작동합니다. :) – Devolus