Re[5]: Кодировки
От: johann  
Дата: 31.10.02 15:14
Оценка:
Здравствуйте 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 документ, который уже загружен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.