[VC 6.0] Задать кодировку файла
Например код:
Код:
if (!m_File.Open(FileName,CFile::modeWrite | CFile::shareExclusive | CFile::modeCreate,&e)) return;
m_File.Write("xEFxBBxBF",3);
// Тут получаем строку в формате UTF-16 и дальше обрабатываем
int nLengthNeeded = WideCharToMultiByte(CP_UTF8,0,myBuffer.data(),MAXBUF,NULL,0,NULL,NULL);
//CT2CA stringRu(myBuffer, CP_UTF8);
std::string pWCMessage;// = new wchar_t[ nLengthNeeded ];
pWCMessage.resize(nLengthNeeded);
WideCharToMultiByte(CP_UTF8,0,myBuffer.data(),MAXBUF,&pWCMessage[0],nLengthNeeded,NULL,NULL);
m_File.Write(pWCMessage.data(),cb);
}
} while (cb > 0);
m_File.Close();
m_File.Write("xEFxBBxBF",3);
// Тут получаем строку в формате UTF-16 и дальше обрабатываем
int nLengthNeeded = WideCharToMultiByte(CP_UTF8,0,myBuffer.data(),MAXBUF,NULL,0,NULL,NULL);
//CT2CA stringRu(myBuffer, CP_UTF8);
std::string pWCMessage;// = new wchar_t[ nLengthNeeded ];
pWCMessage.resize(nLengthNeeded);
WideCharToMultiByte(CP_UTF8,0,myBuffer.data(),MAXBUF,&pWCMessage[0],nLengthNeeded,NULL,NULL);
m_File.Write(pWCMessage.data(),cb);
}
} while (cb > 0);
m_File.Close();
если же убрать m_File.Write("xEFxBBxBF",3) - то файл открывается например Notepad++ как ANSI - не смотря на то, что он содержит юникодные символы. В тоже время, если файл сохранненый вышеприведенным кодом, сделать Сохранить как и убрать галочку BOM - он сохраняется в требуемой кодировке. Не могу придумать как сделать тоже самое - но программно.
Код:
&pWCMessage[0]
А что такое cb?
Цитата: Freeman
А что такое cb?
Это количество символов, прочитанное из базы. я просто оставил только тот код, который непосредственно касается вопроса.
Цитата: grgdvo
Тогда в чем биинарная разница между вашим файлом и тем, что сохраняет Notepad++?
кстати, действительно надо посмотреть чем они бинарно отличаются. Не думаю что тут происки - например если сохранить в AkelPad то Notepad++ его так же нормально определяет.
Цитата: grgdvo
не хочу рыться в дебрях STL, сдается мне так не очень безопасно брать указатель на внутреннюю память std::string, не факт, что там будет лежать то, что нужно
ну я оттуда ничего не беру, я туда кладу ))) предварительно выполнив ресайз до необходимого размера. Так что думаю что вполне безопасно.
вобщем это я туплю. При сохранении без бом - файлы ничем не отличаются. И открываются одинаково. Так что тему можно считать закрытой.