2012-10-21 20 views
57

Ho un sacco di file in arabo, inglese, russo che sono codificati in utf-8. Cercando di elaborare questi file utilizzando uno script in Perl, ottengo questo errore:Come rimuovere caratteri non UTF-8 dal file di testo

Malformed UTF-8 character (fatal) 

Controllare manualmente il contenuto di questi file, ho trovato alcuni caratteri strani in loro. Ora sto cercando un modo per rimuovere automaticamente questi caratteri dai file.

C'è comunque da fare?

+2

Forse è lo stesso di questo: http://stackoverflow.com/questions/7656283/malformed-utf-8-character-fatal-error-while-parsing-xml-using-xmllibxml –

+2

Si prega di fare riferimento a questo link: http://unix.stackexchange.com/questions/6516/filtering-invalid-utf8 – askmish

+3

Cosa sono i caratteri non UTF-8? Tutti i personaggi in una stringa UTF-8 ben formata sono caratteri UTF-8 (in realtà Unicode)! Alcuni di essi sono codificati in UTF-8 in più byte consecutivi .... –

risposta

0

Il metodo deve leggere byte per byte e comprendere e apprezzare pienamente la costruzione di caratteri in byte. Il metodo più semplice consiste nell'utilizzare un editor che leggerà qualsiasi cosa ma solo i caratteri di output UTF-8. Il textpad è una scelta.

+0

iconv non è disponibile in cygwin. C'è un modo per farlo su Windows/Cygwin? Ho un grande file XML (100000+ linee) che richiede la rimozione di caratteri non validi. Non mi interessa il valido utf-8. Ho impostato notepad ++ su utf-8, ma anche dopo averlo salvato da lì ho ancora errori nel parser XML – mljm

111

Questo comando:

iconv -f utf-8 -t utf-8 -c file.txt 

pulirà il file UTF-8, saltando tutti i caratteri non validi.

-f is the source format 
-t the target format 
-c skips any invalid sequence 
+10

"iconv -f utf-8 -t utf-8 -c file.txt" su un Mac. trattino tra 'f' e '8' – Colin

+0

Corretti, i trattini sono obbligatori. Grazie per la modifica. Puoi ottenere l'elenco delle codifiche supportate tramite iconv --list – Palantir

+0

Convenientemente puoi trasformare i contenuti degli appunti su un Mac in questo modo: 'pbpaste | iconv -f utf-8 -t -utf-8 -c | pbcopy'. Ho anche creato un flusso di lavoro Alfred con un collegamento globale per rimuovere tutti i caratteri speciali selezionando "ascii". –

-2
cat foo.txt | strings -n 8 > bar.txt 

farà il lavoro.

+7

No, questo ucciderà anche molti caratteri utf-8 validi. –

Problemi correlati