Simo9912 (Normal User)
Newbie
Messaggi: 7
Iscritto: 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???
|
|
AldoBaldo (Member)
Guru
Messaggi: 699
Iscritto: 08/01/2015
|
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. |
|
Simo9912 (Normal User)
Newbie
Messaggi: 7
Iscritto: 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???
|
|
Simo9912 (Normal User)
Newbie
Messaggi: 7
Iscritto: 14/06/2016
|
Ops..questo è il file
Ultima modifica effettuata da Simo9912 il 14/06/2016 alle 16:55 |
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
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++ |
char possibleBOM[3];
fread((void*)&possibleBOM[0], sizeof(char), 3, file_handler);
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
|
|
Simo9912 (Normal User)
Newbie
Messaggi: 7
Iscritto: 14/06/2016
|
Scusa non ho ben capito cosa fa e dove dovrei inserire il codice...
|
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
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 |
FILE* file_handler = fopen("miofile.txt", "r");
|
aggiungi dopo quello che ti ho dato:
Codice sorgente - presumibilmente C/C++ |
FILE* file_handler = fopen("miofile.txt", "r")
char possibleBOM[3];
fread((void*)&possibleBOM[0], sizeof(char), 3, file_handler);
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 |
|
Simo9912 (Normal User)
Newbie
Messaggi: 7
Iscritto: 14/06/2016
|
Oraprovo e vi so dire grazie
|
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
Nota: il compilatore C potrebbe bisticciare con quei tre caratteri, meglio fare così:
Codice sorgente - presumibilmente C/C++ |
FILE* file_handler = fopen("miofile.txt", "r");
char possibleBOM[3];
fread((void*)&possibleBOM[0], sizeof(char), 3, file_handler);
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.
|
|