Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[VC 6.0] Задать кодировку файла

1
06 февраля 2014 года
kot_
7.3K / / 20.01.2000
Может кто сталкивался - как задать программно кодировку текстового файла UTF-8 (без BOM)?
Например код:

Код:
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();
прекрасно создает файл в требуемой кодировке - но с BOM (это понятно)
если же убрать m_File.Write("xEFxBBxBF",3) - то файл открывается например Notepad++ как ANSI - не смотря на то, что он содержит юникодные символы. В тоже время, если файл сохранненый вышеприведенным кодом, сделать Сохранить как и убрать галочку BOM - он сохраняется в требуемой кодировке. Не могу придумать как сделать тоже самое - но программно.
412
07 февраля 2014 года
grgdvo
323 / / 04.07.2007
Не понял... то есть Notepad++ (Сохранить как) сохраняет utf-8 без BOM и потом при открытии сам же распознает, что это utf-8? Тогда в чем биинарная разница между вашим файлом и тем, что сохраняет Notepad++? Сдается мне здесь происки Notepad++. Вообще вставлять BOM, это imho хороший тон с точки зрения переносимости.


 
Код:
&pWCMessage[0]
не хочу рыться в дебрях STL, сдается мне так не очень безопасно брать указатель на внутреннюю память std::string, не факт, что там будет лежать то, что нужно
10
07 февраля 2014 года
Freeman
3.2K / / 06.03.2004
А что такое cb?
1
07 февраля 2014 года
kot_
7.3K / / 20.01.2000
Цитата: Freeman
А что такое cb?


Это количество символов, прочитанное из базы. я просто оставил только тот код, который непосредственно касается вопроса.

Цитата: grgdvo
Тогда в чем биинарная разница между вашим файлом и тем, что сохраняет Notepad++?


кстати, действительно надо посмотреть чем они бинарно отличаются. Не думаю что тут происки - например если сохранить в AkelPad то Notepad++ его так же нормально определяет.

Цитата: grgdvo
не хочу рыться в дебрях STL, сдается мне так не очень безопасно брать указатель на внутреннюю память std::string, не факт, что там будет лежать то, что нужно


ну я оттуда ничего не беру, я туда кладу ))) предварительно выполнив ресайз до необходимого размера. Так что думаю что вполне безопасно.

1
07 февраля 2014 года
kot_
7.3K / / 20.01.2000
вобщем это я туплю. При сохранении без бом - файлы ничем не отличаются. И открываются одинаково. Так что тему можно считать закрытой.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог