Я использую XercesC Lib для создания сериализации моих данных. Как я могу установить его на UTF-8? Он всегда генерируется с UTF-16, и я не могу найти способ изменить это.
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 на стороне Java, я всегда получаю content is not allowed in prolog
и пока это единственное отличие, которое я вижу в XML. Когда я пытаюсь локально десериализовать в JAXB, это работает. Когда я беру свой XercesC XML, я получаю эту ошибку. Когда я пытаюсь отформатировать его в Notepad ++ с помощью плагина XML, он также говорит, что произошла ошибка, но не сообщает мне никаких подробностей.
Проверьте использование DOMLSOutput
, это должно дать вам именно то, что вы хотите. То есть Вы создаете DOMLSOutput
объект, к которому вы пишете (вместо использования DOMLSSerializer::writeToString
).
Других решений пока нет …