Errores, fallos, preguntas - página 2825

 
Vladimir Pastushak:

¿Qué pasa con el código?

También prefiero no responder a explicar lo pernicioso de trabajar con una lista genérica de personajes.

 
Alexey Viktorov:

Prefiero no responder a ninguno de los dos, que explicar lo pernicioso de trabajar con una lista de personajes genérica.

En privado

 

¿elresaltado de la sintaxis en el sitio web tiene problemas?


b.highlight no es una función

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

Hay un archivo de texto, pero la codificación es desconocida de antemano. En consecuencia, tenemos que determinar con qué bandera abrirlo: FILE_ANSI o FILE_UNICODE.

Quien tenga uno, por favor comparta una bicicleta sobre el tema.

 
fxsaber:

Hay un archivo de texto, pero la codificación es desconocida de antemano. En consecuencia, tenemos que determinar con qué bandera abrirlo: FILE_ANSI o FILE_UNICODE.

Si tienes una, por favor, comparte tu moto sobre el tema.

¿No hay etiquetas de codificación dentro del archivo?

 

A veces Unicode tiene una etiqueta de codificación en los primeros 2 bytes.

También hay 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.
 
Hice esto.
  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);
    }
  }
Pero no sé si esta condición es siempre correcta.
 
fxsaber:
Lo hice así. Pero no sé si esta condición es siempre correcta.

este token es opcional y es diferente para LE, BE y UTF8. si falta, teóricamente puedes contar el número de bytes nulos en algún trozo inicial del archivo

 
Andrei Trukhanovich:

este token es opcional y es diferente para LE, BE y UTF8. si falta, teóricamente es posible contar el número de bytes nulos en algún trozo inicial del archivo

He considerado esta solución, gracias. Parece ser la única manera de hacerlo.