2016-05-27 64 views
0

我正在C++中使用libxml2創建一個xml文檔。創建xml文件後,我在xml緩衝區的頂部看到以下行。在C++中的libxml2,如何設置編碼

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

我在創建文檔時沒有指定任何編碼。某些xml內容ascii值大於127,這不是由ISO-8859-1編碼處理的。例如:我的英文字符(£)在我的xml內容中。所以無論什麼時候遇到大於127的ascii值,它都會中斷並且我的xml文件不完整。我從一些論壇上讀到說,將編碼更改爲UTF-8將處理這種情況。但我不知道如何爲xml文檔創建指定編碼。以下是我用過的示例代碼。

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; 

輸出:

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

提示:觀察到的行爲是由您的來電xmlSetProp觸發。你如何看待「項目」的價值? –

回答

2

我想,你應該使用xmlDocDumpMemoryEnc()(或xmlDocDumpFormatMemoryEnc(),如果你想太多控制縮進),而不是xmlDocDumpMemory()

喜歡的東西

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

保存怎麼樣?有沒有libxml2 api來保存編碼? – impulse

+0

@impulse - 嘗試使用'xmlSaveFileEnc()'或'xmlSaveFormatFileEnc()' – max66

相關問題