Errori, bug, domande - pagina 2825

 
Vladimir Pastushak:

Cosa c'è di sbagliato nel codice?

Preferirei anche non rispondere piuttosto che spiegare la perniciosità di lavorare con una lista generica di personaggi.

 
Alexey Viktorov:

Preferirei anche non rispondere piuttosto che spiegare la perniciosità di lavorare con una lista generica di personaggi.

In privato

 

l'evidenziazione della sintassi sul sito web è difettosa?


b.highlight non è una funzione

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

C'è un file di testo, ma la codifica è sconosciuta a priori. Di conseguenza, dobbiamo determinare con quale bandiera aprirlo: FILE_ANSI o FILE_UNICODE.

Chi ne ha uno, per favore condivida una bicicletta sull'argomento.

 
fxsaber:

C'è un file di testo, ma la codifica è sconosciuta a priori. Di conseguenza, dobbiamo determinare con quale bandiera aprirlo: FILE_ANSI o FILE_UNICODE.

Se ne hai uno, per favore condividi la tua moto sull'argomento.

Non ci sono etichette di codifica nel file?

 

A volte Unicode ha un'etichetta di codifica nei primi 2 byte.

C'è anche VinAPI IsTextUnicode come questa 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.
 
Ho fatto questo.
  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);
    }
  }
Ma non so se questa condizione è sempre corretta.
 
fxsaber:
L'ha fatto in questo modo. Ma non so se questa condizione è sempre corretta.

questo token è opzionale ed è diverso per LE, BE e UTF8. se manca, si può teoricamente contare il numero di byte nulli in qualche pezzo iniziale del file

 
Andrei Trukhanovich:

questo token è opzionale ed è diverso per LE, BE e UTF8. se manca, si potrebbe teoricamente contare il numero di byte nulli in qualche pezzo iniziale del file

Considerato questo workaround, grazie. Sembra essere l'unico modo per farlo.

Motivazione: