ошибка в формате UTF_8 при создании моего xml с использованием libxml и c++

Я создал файл xml, используя libxml и С++. Что я хочу сделать сейчас, так это прочитать из .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