2016-05-27 16 views
0

Ich erstelle ein XML-Dokument mit libxml2 in C++. Nachdem die XML-Datei erstellt wurde, sehe ich die folgende Zeile oben im XML-Puffer.libxml2 in C++, wie man Codierung einstellt

<?xml version="1.0" encoding="ISO-8859-1"?> 

Ich habe beim Erstellen des Dokuments keine Codierung angegeben. Ein Teil des XML-Inhalts ascii ist größer als 127, was nicht durch die ISO-8859-1-Codierung gehandhabt wird. Zum Beispiel: Ich habe Pfund-Zeichen (£) in meinem XML-Inhalt. Wann immer es einen ASCII-Wert größer als 127 antrifft, bricht es ab und meine XML-Datei ist unvollständig. Ich habe aus einigen Foren gelesen, dass das Ändern der Codierung in UTF-8 diese Art von Szenarien behandelt. Aber ich weiß nicht, wie ich die Kodierung für die Erstellung des XML-Dokuments festlegen soll. Im Folgenden ist der Beispielcode, den ich verwendet habe.

xmlDoc *doc = NULL; 
xmlChar *xmlbuff = NULL; 
int buffersize; 
xmlNodePtr pNode; 
doc = xmlNewDoc(NULL); 
pNode = xmlNewNode(0, (const xmlChar*)"Temp"); 
xmlDocSetRootElement(doc, pNode); 
xmlSetProp(pNode, (const xmlChar*)"Item", (const xmlChar*)"Office£"); 
xmlDocDumpMemory(doc, &xmlbuff, &buffersize); 
xmlFree(xmlbuff); 
xmlFreeDoc(doc); 
doc = NULL; 

Ausgang:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<Temp Item="Office 
+0

Hinweis: das beobachtete Verhalten von Ihrem Anruf xmlSetProp ausgelöst wurde. Wie wurde Ihrer Meinung nach der Wert von "Item" interpretiert? –

Antwort

2

Ich nehme an, dass Sie xmlDocDumpMemoryEnc() verwenden sollten (oder xmlDocDumpFormatMemoryEnc(), wenn Sie die Vertiefung steuern möchten auch) statt xmlDocDumpMemory().

So etwas wie

xmlDocDumpMemoryEnc(doc, &xmlbuff, &buffersize, "UTF-8"); 
+0

Wie wäre es mit dem Speichern? Gibt es libxml2 api zum Speichern mit der Codierung? – impulse

+0

@impulse - versuchen Sie es mit 'xmlSaveFileEnc()' oder 'xmlSaveFormatFileEnc()' – max66