Здравствуйте Xenia, Вы писали:
X>А может мне просто перед закачкой файла в базу программно открыть его как текстовый файл и прибить строчку
X><?xml version="1.0" encoding="utf-8"?> ?? А потом уже, без этой строчки передавать как парметр хранимой процедуре?
Вопрос не в том что ты можешь фактически "руками" дописать эту строчку.
Просто дописывая "руками" строчку ты не меняешь фактически содержимое xml-файла (точнее его носителя), соответственно все что было в кодировке Windows-1251 (или что у тебя за кодировка там была) то в ней и осталось. Ошибку же от xml parser'а ты получаешь как раз потому, что добавив строку с кодировкой UTF-8 ты заставляешь его считать, что данные с которыми он работает находятся в этой кодировке. а русские символы в этой кодировке представляются не теми же самым символами что и в Windows-1251 (а именно их он встречает). Поэтому и говорит, что кодировка не та. Если тебе надо преобразовать кодировку "носителя" xml штатными средствами MSXML, загрузи xml-файл и добавь processing instruction примерно так:
// Add encoding processing instruction to the top of the XML file
std::wstring a_string = L"version=\"1.0\" encoding=\"" + а_Encoding + L"\"";
a_xmlDoc->insertBefore(a_xmlDoc->createProcessingInstruction(L"xml",
a_string.c_str()), _variant_t(a_xmlDoc->firstChild, true));
где m_Encoding -- имя кодировки, a_xmlDoc -- MSXMLDOMDocumentPtr -- тот самый xml документ, который уже загружен.