грешка относно формат UTF_8 при създаване на моя xml с помощта на libxml и c++

Създадох xml файл с помощта на libxml и c++. Това, което искам да направя сега, е да прочета от .txt и да поставя този текст между някои конкретни тагове.

Опитах следния код, просто чета от файл и го записвам между тагове:

char * s ;
double d;

fichier>>i>>s>>d;

// fichier.close();                                                                                                                

cout << s << endl ;

 xmlNewChild(root_node, NULL, BAD_CAST "metadata",
             BAD_CAST   s );

Докато изпълнявам този код, получавам тази грешка:

output error : string is not in UTF-8 

Така че предполагам, че има несъвместимост на формата между входа и изхода. Можете ли да ми помогнете, моля? Не знам как да поправя това.


person Mimi    schedule 03.04.2013    source източник
comment
Вашият изходен файл UTF-8 ли е?   -  person Neel Basu    schedule 03.04.2013


Отговори (1)


Трябва да преобразувате входния низ във вход UTF-8, като използвате една от функциите, дефинирани в модула за кодиране. (Или като използвате друга библиотека за кодиране, която харесвате като icu ) можете да намерите подробности за модула за кодиране тук http://www.xmlsoft.org/html/libxml-encoding.html

Предполагам, че искате да запазите байтовете, така че това, от което се нуждаете, да е нещо като (МНОГО нетествано и извлечено само от документите.)

//Get the encoding
xmlCharEncodingHandlerPtr encoder = xmlGetCharEncodingHandler(XML_CHAR_ENCODING_ASCII);

// Each ascii byte should take up at most 2 utf-8 bytes IIRC so allocate enough space.
char* buffer_utf8 = new char[length_of_s*2];

//Do the encoding
int consumed = length_of_s;
int encoded_length=length_of_s*2;

int len = (*encoder.input)(buffer_utf8, &encoded,s,&consumed);
if( len<0 ) { .. error .. }
buffer_utf8[len]=0; // I'm not sure if this is automatically appended or not.

//Now you can use buffer_utf8 rather than s.

Ако вашият вход е в различно кодиране, поддържано от libxml, тогава трябва просто да промените XML_CHAR_ENCODING_ASCII на правилната константа, въпреки че може да се наложи да промените и броя байтове, разпределени в in buffer_utf8.

person Michael Anderson    schedule 03.04.2013