Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > FILE*, Unicode BOM


Автор: lv151 17.8.2010, 16:14
VS2008SP1, WINXP3
Код

int _tmain(int argc, _TCHAR* argv[])
{
    int    i = 10;
    double fp = 1.5;
    TCHAR   s[] = _T("This is a string");
    FILE* f = _wfopen(_T("d:\\file"), _T("wt"));
         //FILE* f = _wfopen(_T("d:\\file"), _T("wt, ccs=UTF-8"));
    fwprintf(f, _T("%s"), s);
    fclose( f );

    return 0;
}


Не получается писать в Unicode BOM.
В чём проблема?

Автор: ncr 17.8.2010, 16:58
BOM надо добавлять вручную.

Автор: Alexeis 17.8.2010, 17:51
  По идее BOM определяется только при чтении файла, на запись оно не работает.

Автор: lv151 19.8.2010, 09:30
Добавляю BOM:

Код

FILE *fp;
fp = _tfopen(_T("d:\\test.bin"), _T("wb"));
char buff[2] = "";
buff[0] = (char)0xFE;
buff[1] = (char)0xFF;

fwrite(buff, 1, 2, fp);    
fclose(fp);


Содержимое файла в HEX: FFFE.

Далее открываю файл :

Код

FILE* f1 = _tfopen(_T("d:\\test.bin"), _T("wt, ccs=UTF-8"));


Трётся первый байт 
Содержимое файла в HEX: BBFE.

Почему это происходит?

Разобрался, при FILE* f1 = _tfopen(_T("d:\\test.bin"), _T("wt, ccs=UTF-8")); он пишет первые 2 байта BBEF.
Но как тогда добавить BOM?


Автор: ncr 19.8.2010, 21:36
Если файл открывать так, как у вас в первом сообщении закомментировано:
//FILE* f = _wfopen(_T("d:\\file"), _T("wt, ccs=UTF-8"));

- то BOM добавится автоматически.

В хексе это будет выглядеть как "EF BB BF".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)