2012-01-26 9 views
5

Sono abbastanza nuovo per file, flussi e diverse codepage. Vedere questo è il mio problema:C#: Come scoprire se ho la codifica giusta

Ottengo file di testo e alcuni di essi sono stati creati con la codepage Windows-1252, alcuni sono ancora IBM850 e talvolta UTF8. Quando li importa, il mio database mostra tutti i tipi di simboli per ä, ö, ü, ß, perché li ho letti con la codepage sbagliata. solo quando li impongo con la codepage corretta, tutto funziona correttamente.

Questo è quello che ho pensato che sarebbe potuto un buon approccio:

Converti ä, ö, ü, ß di byte array con una tabella codici X

esempio:

byte[] myAeKl = Encoding.GetEncoding("IBM850").GetBytes("ä"); 

byte[] myAeGr = Encoding.GetEncoding("IBM850").GetBytes("Ä"); 

passare attraverso i file di testo e confrontare ogni matrice di byte di lettere con quelli sopra. se trovato usa quella tabella codici, altrimenti prova un'altra codepage.

Questo è quello che non capisco: Come posso confrontare i byte dalle lettere nel file di testo alle matrici di byte delle lettere che sto cercando. Ad esempio:

if (Textfile.Letter == myAeKl || Textfile.Letter == myAeGr) 
... 

C'è un altro modo per ottenere la tabella codici giusto? Ho il giusto approccio alla soluzione?

risposta

0

Vorrei provare a caricare il file con una codifica e se riscontro caratteri inaspettati, caricarlo con l'altro.

+0

Ciao, Grazie per la tua risposta veloce. bene il problema è che i file possono essere grandi e l'importazione richiede una certa quantità di tempo e il problema più grande non lo faccio. Devo solo programmarlo :) Greetz – Phenix

+0

"se incontro" era inteso a livello di programmazione. –

3

Non esiste un metodo infallibile, sfortunatamente, poiché un certo flusso di byte può essere significativo in più di una codifica.

Un modo per farlo è usare congettura ed euristica utilizzando altri dati aziendali. Puoi dedurre la codifica dal nome del file? Da alcuni altri metadati, come il nome del mittente? Se è così, prova a filtrare usando quello.

In caso contrario, puoi provare a scavare ea indovinare. Se i file possono essere grandi, come dici tu, basta dare un'occhiata e inserire un campione di testo (ad esempio, i primi 512 byte, dovrebbe essere sufficiente). Hai qualche possibilità di indovinare cosa può essere il contenuto? E 'testo libero in inglese/ebraico o qualcosa del genere? In tal caso, cercare le parole comuni nell'esempio di 512 byte. I file contengono un formato fisso? Se è così, cercalo. Quindi esegui questi test su campioni live, guarda i risultati, modifica i test e riprova finché non hai una probabilità relativamente buona di riconoscere la codifica.

Buona fortuna!

+0

Ciao, Grazie mille per tutti i tuoi consigli! Ora non ho quel tipo di informazioni. Tutti i testi nei file sono in tedesco, le prime posizioni possono essere una lettera e in altri numeri di file. Questo è il motivo per cui ho pensato che la mia migliore scommessa era/è ottenere tutto in byte e trovo quelli ä, ö, ü e ß da qualche parte nel testo Grazie ancora, Spero di trovare qualche tipo di schema da abbinare . – Phenix

Problemi correlati