2013-05-23 23 views
5

Sto importando il file .txt da un server remoto e salvandolo in un database. Io uso uno script .Net per questo scopo. A volte mi capita di notare una parola/caratteri incomprensibili (Ullerهkersvنgen) all'interno dei file, il che crea un problema durante il salvataggio nel database.Trovare caratteri non ASCII in un file di testo e convertirli nel loro equivalente Unicode

Voglio filtrare tutti questi caratteri e convertirli in unicode prima di salvarli nel database.

Nota: ho attraversato molti post simili ma non ho avuto fortuna.

Il vostro aiuto in questo contesto sarà molto apprezzato.

Grazie.

+0

[Ciò che ogni programmatore ha assolutamente bisogno di sapere su codifiche e set di caratteri per lavorare con il testo] (http://kunststube.net/encoding/) – deceze

+0

@deceze, questa non è la risposta alla mia domanda. Si prega di non utilizzare modi economici per portare traffico al tuo sito. Pensa sempre a ciò di cui ha bisogno l'opt e aiutali in modi brevi. – Mehboob

+0

Se comprendi le codifiche, la risposta a questa domanda diventa più evidente. Dal momento che non posso ripetere le basi delle codifiche per tutti, ogni volta, ho scritto quell'articolo e linkarlo. Non ho alcun interesse particolare nell'incrementare il traffico sul mio sito, mi costa solo più soldi quando lo faccio. Quindi stai dicendo che l'articolo non ti ha fornito nuove informazioni ed era completamente fuori tema? – deceze

risposta

4

È necessario conoscere o almeno indovinare la codifica dei caratteri dei dati per poterli convertire correttamente. Quindi dovresti provare a trovare informazioni sull'origine e il formato del file di testo e assicurarti di aver letto correttamente il file nel tuo software.

Ad esempio, "Uller ه kersv ن gen" assomiglia ad un nome scandinavo, con lettere scandinave al suo interno, interpretato erroneamente secondo un'ipotesi di codifica dei caratteri errata o come mungita da una conversione errata del codice carattere. La prima lettera araba in esso, "ه", è U+064 7 LETTERA ARABA HEH. Nella codifica ISO-8859-6, è E7 (esadecimale); in windows-1256, è E5. Poiché il testo scandinavo è normalmente rappresentato in ISO-8859-1 o Windows-1252 (quando non si usano codifiche Unicode), è naturale verificare in cosa si riferiscano E7 ed E5: "ç" e "å". Per ragioni linguistiche, quest'ultimo è molto più probabile qui. La seconda lettera araba è "ن" U + 0646 LETTERA ARABA NOON, che è E4 in windows-1256. E in ISO-8859-1, E4 è "ä". Questo ha perfettamente senso: la parola è "Ulleråkersvägen", un vero nome di strada svedese (almeno a Uppsala).

Pertanto, il dato è probabilmente il testo codificato ISO-8859-1 o Windows-1252 (Windows Latin 1), interpretato erroneamente come Windows-1256 (Windows arabo). Non è necessaria alcuna conversione; hai solo bisogno di leggere i dati come codificati Windows-1252. (Dopo la lettura, si può naturalmente essere convertito in un'altra codifica.)

+0

Sì, sei corretto al 100%. "Uller ه kersv ن gen" è uguale "Ulleråkersvägen". Ora, come possiamo farlo attraverso ASP.Net per rilevare automaticamente tali caratteri e convertirli di conseguenza. – Mehboob

+2

@ Mehboob, non puoi. In alcuni casi, potrebbero essere applicate alcune euristiche, ma il problema generale di dedurre la codifica dei caratteri dai soli dati richiede intelletto umano e comprensione, oltre a una certa esperienza (e potrebbe essere impossibile). –

+1

Non possiamo usare un'espressione regolare per catturare tutti i caratteri non ASCII e quindi convertirli in unicode? – Mehboob

Problemi correlati