Ошибки, баги, вопросы - страница 2825

 
Vladimir Pastushak:

Что не так с кодом ?

Мне тоже лучше не отвечать, чем объяснять пагубность работы с общим списком символов.

 
Alexey Viktorov:

Мне тоже лучше не отвечать, чем объяснять пагубность работы с общим списком символов.

В личку

 

подсветка синтаксиса на сайте глюкнула?


b.highlight is not a function

 
2020.08.15 13:07:42.660 Network 'xxxx': no connection to MetaQuotes-Beta
 

Есть текстовый файл, но заранее неизвестно, какая в нем кодировка. Соответственно, нужно определить, с каким флагом открывать: FILE_ANSI или FILE_UNICODE.

У кого есть, поделитесь велосипедом по теме.

 
fxsaber:

Есть текстовый файл, но заранее неизвестно, какая в нем кодировка. Соответственно, нужно определить, с каким флагом открывать: FILE_ANSI или FILE_UNICODE.

У кого есть, поделитесь велосипедом по теме.

Внутри файла нет меток о кодировке разве?

 

Иногда в юникоде в первых 2 байтах есть метка о кодировке.

Есть ещё ВинАПИ IsTextUnicode вот такая  https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-istextunicode

IsTextUnicode function (winbase.h) - Win32 apps
IsTextUnicode function (winbase.h) - Win32 apps
  • 2018.12.05
  • lastnameholiu
  • docs.microsoft.com
Determines if a buffer is likely to contain a form of Unicode text.
 
Сделал так.
  bool IsUnicode( const uchar &Bytes[] )
  {
    return((::ArraySize(Bytes) > 1) && (Bytes[0] == 0xFF) && (Bytes[1] == 0xFE));
  }

  void Unicode2ANSI( uchar &Bytes[] )
  {
    if (IsUnicode(Bytes))
    {
      const int Size = (::ArraySize(Bytes) >> 1) - 1;
      
      for (int i = 0; i < Size; i++)
        Bytes[i] = Bytes[(i << 1) + 2];
        
      ::ArrayResize(Bytes, Size);
    }
  }
Но не знаю, всегда ли такое условие верное.
 
fxsaber:
Сделал так. Но не знаю, всегда ли такое условие верное.

этот маркер необязательный и имеет разный вид для LE, BE и UTF8. если его нет теоретически можно посчитать количество нулевых байт в каком-то начальном куске файла

 
Andrei Trukhanovich:

этот маркер необязательный и имеет разный вид для LE, BE и UTF8. если его нет теоретически можно посчитать количество нулевых байт в каком-то начальном куске файла

Такой обходной вариант рассматривал, спасибо. Похоже, только так и надо.

Причина обращения: