Erros, bugs, perguntas - página 2825

 
Vladimir Pastushak:

O que há de errado com o código?

Também prefiro não responder do que explicar a perniciosidade de trabalhar com uma lista de caracteres genérica.

 
Alexey Viktorov:

Também prefiro não responder do que explicar a perniciosidade de trabalhar com uma lista de caracteres genérica.

Em privado

 

odestaque da sintaxe no sítio web é deficiente?


b.destaque não é uma função

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

Existe um ficheiro de texto, mas a codificação é desconhecida de antemão. Consequentemente, precisamos de determinar com que bandeira abrir: FILE_ANSI ou FILE_UNICODE.

Quem tiver uma, por favor partilhe uma bicicleta sobre o assunto.

 
fxsaber:

Existe um ficheiro de texto, mas a codificação é desconhecida de antemão. Consequentemente, precisamos de determinar com que bandeira abrir: FILE_ANSI ou FILE_UNICODE.

Se tiver uma, por favor partilhe a sua bicicleta sobre o assunto.

Não existem etiquetas codificadoras no interior do ficheiro?

 

Por vezes o Unicode tem uma etiqueta codificadora nos primeiros 2 bytes.

Há também VinAPI IsTextUnicode como este 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.
 
Fui eu que fiz isto.
  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);
    }
  }
Mas não sei se esta condição é sempre correcta.
 
fxsaber:
Fê-lo desta forma. Mas não sei se esta condição é sempre correcta.

esta ficha é opcional e é diferente para LE, BE e UTF8. se faltar, pode teoricamente contar o número de bytes nulos em algum pedaço inicial do ficheiro

 
Andrei Trukhanovich:

este símbolo é opcional e é diferente para LE, BE e UTF8. se estiver em falta, poderia teoricamente contar o número de bytes nulos em algum pedaço inicial do ficheiro

Considerado este trabalho como uma alternativa, obrigado. Parece ser a única forma de o fazer.