Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problemi con C
Forum - C/C++ - Problemi con C

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
Simo9912 (Normal User)
Newbie


Messaggi: 7
Iscritto: 14/06/2016

Segnala al moderatore
Postato alle 15:54
Martedì, 14/06/2016
Scusate ho un problema con C...
Io devo prendere da un file degli array per convertirli in altri array in base alle scelte che può fare un utente...
Però davanti alla mia stringa di inizio file ho  Questo codice()il problema che non è una stringa ma il BOM del UTF-8 ...come faccio a rimuoverla???

PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 16:39
Martedì, 14/06/2016
Non ne so niente di queste cose. Proprio per questo ho cercato qualche notizia su 'sto "BOM dell'UTF-8" e sto cercando di capire. Il file dal quale devi estrarre l'array è dunque un file di testo dove ogni carattere è rappresentato in uno "spazio" di 8 bit? Da quel che ho letto m'è parso di capire che un file in UTF-8 può essere letto come un qualsiasi file di testo, e che i primi tre caratteri "" sono lì solo per ragioni di compatibilità o qualcosa del genere. Se fosse così, non sarebbe sufficiente cominciare a estrarre i dati dal quarto carattere del file in avanti?


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
Simo9912 (Normal User)
Newbie


Messaggi: 7
Iscritto: 14/06/2016

Segnala al moderatore
Postato alle 16:52
Martedì, 14/06/2016
Premetto che non ne so praticamente niente di C.....praticamente dovrei avere le prime due righe libere senza quei caratterei dell'UTF-8 per usarli in quanto devo fare una sostituzione.....come potrei fare a toglierli...c'è piu precisamente cominciare la ricerca 4 caratteripiu avanti???

PM Quote
Avatar
Simo9912 (Normal User)
Newbie


Messaggi: 7
Iscritto: 14/06/2016

Segnala al moderatore
Postato alle 16:52
Martedì, 14/06/2016
Ops..questo è il file

Ultima modifica effettuata da Simo9912 il 14/06/2016 alle 16:55
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 17:14
Martedì, 14/06/2016
fseek(file_handler, 3, SEEK_SET);

sposta il cursore caratteri avanti alla posizione iniziale, così il byte letto successivamente sarà il quarto.

però prima di farlo conviene controllare se è veramente necessario:

Codice sorgente - presumibilmente C/C++

  1. char possibleBOM[3];
  2. fread((void*)&possibleBOM[0], sizeof(char), 3, file_handler);
  3. if ((possibleBOM[0] != 'ï') || (possibleBOM[1] != '»') || (possibleBOM[2] != '¿')) fseek(file_handler, 0, SEEK_SET);



La seconda soluzione è la migliore, ma la prima è quella che risolve il tuo problema in maniera più immediata, ma darà problemi con file non UTF-8

PM Quote
Avatar
Simo9912 (Normal User)
Newbie


Messaggi: 7
Iscritto: 14/06/2016

Segnala al moderatore
Postato alle 17:19
Martedì, 14/06/2016
Scusa non ho ben capito cosa fa e dove dovrei inserire il codice...

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 17:24
Martedì, 14/06/2016
Prima della lettura del file.

Il file_handler è il file aperto con fopen();

suppongo avrai qualcosa del genere nel tuo codice:
Codice sorgente - presumibilmente Plain Text

  1. FILE* file_handler = fopen("miofile.txt", "r");



aggiungi dopo quello che ti ho dato:
Codice sorgente - presumibilmente C/C++

  1. FILE* file_handler = fopen("miofile.txt", "r")
  2. char possibleBOM[3];
  3. fread((void*)&possibleBOM[0], sizeof(char), 3, file_handler);
  4. if ((possibleBOM[0] != 'ï') || (possibleBOM[1] != '»') || (possibleBOM[2] != '¿')) fseek(file_handler, 0, SEEK_SET);



e i caratteri successivi che leggerai saranno quelli che ti aspetti di leggere.

Ultima modifica effettuata da TheDarkJuster il 14/06/2016 alle 17:25
PM Quote
Avatar
Simo9912 (Normal User)
Newbie


Messaggi: 7
Iscritto: 14/06/2016

Segnala al moderatore
Postato alle 17:46
Martedì, 14/06/2016
Oraprovo e vi so dire grazie

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 19:08
Martedì, 14/06/2016
Nota: il compilatore C potrebbe bisticciare con quei tre caratteri, meglio fare così:

Codice sorgente - presumibilmente C/C++

  1. FILE* file_handler = fopen("miofile.txt", "r");
  2. char possibleBOM[3];
  3. fread((void*)&possibleBOM[0], sizeof(char), 3, file_handler);
  4. if ((possibleBOM[0] != 0xEF) || (possibleBOM[1] != 0xBB) || (possibleBOM[2] != 0xBF)) fseek(file_handler, 0, SEEK_SET);



Comunque se stai facendo fopen aprendo il file con "rb" anzichè "r" forse risolvi aprendo con quest'ultima modalità e risparmiando di usare il trucco che ti ho postato.


PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo