Я читаю XML-документ, который закодирован в iso-8859-1.Эта кодировка также описана в документе: <?xml version="1.0" encoding="ISO-8859-1"?>
Когда я читаю элементы xml, я получаю данные в кодировке utf-8, но мне нужна iso-8859-1 для дальнейшей обработки.
Мой код для чтения файла выглядит следующим образом:
xmlTextReaderPtr reader;
reader = xmlReaderForFile(sessionFileName, "iso-8859-1", 0);
if (reader != NULL)
{
ret = xmlTextReaderRead(reader);
while (ret == 1)
{
//only inspect start of elements
if (xmlTextReaderNodeType(reader) != XML_READER_TYPE_ELEMENT)
{
ret = xmlTextReaderRead(reader);
continue;
}
//getting node name
elem_name = xmlTextReaderConstName(reader);
//getting content of element (text or cdata)
xmlChar *elem_value = xmlTextReaderReadString(reader);
}
}
Как я понимаю http://xmlsoft.org/encoding.html, libxml2 хранит все данные внутри себя в utf-8, поэтому elem_value также utf-8,Как я могу получить elem_value в iso-8859-1?Должен ли я конвертировать его вручную?
Это будет моя попытка:
unsigned char *conv_value;
if (elem_value)
{
int in_size = xmlStrlen(elem_value);
int out_size = in_size;
conv_value = (unsigned char *)malloc((size_t)out_size + 1);
if (UTF8Toisolat1(conv_value, &out_size, elem_value, &in_size) <= 0 ||
(in_size - out_size) != 0)
{
//error while conversation
free(conv_value);
//take original value
conv_value = elem_value;
TRACE("error while converting, take utf-8 value");
}
else
{
conv_value[out_size] = 0; /* null terminating conv_value */
}
}